15身份证号码转18位算法,用java 程序怎样实现即java程序源代码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15身份证号码转18位算法,用java 程序怎样实现即java程序源代码?相关的知识,希望对你有一定的参考价值。

参考技术A import java.text.DateFormat;

import java.text.NumberFormat;

import java.util.*;

import java.io.ByteArrayInputStream;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

public class COMUT

public COMUT()



/**
*
* 修补15位居民身份证号码为18位
*
* @param personIDCode
*
* @return
*/

public static String fixPersonIDCode(String personIDCode)



String retIDCode = "";

if (personIDCode == null || personIDCode.trim().length() != 15)

return personIDCode;



String id17 = personIDCode.substring(0, 6) + "19"
+ personIDCode.substring(6, 15); // 15为身份证补\'19\'

// char[] code =
// \'1\',\'0\',\'X\',\'9\',\'8\',\'7\',\'6\',\'5\',\'4\',\'3\',\'2\';
// //11个
char[] code = '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' ; // 11个

int[] factor = 0, 2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7 ; // 18个;

int[] idcd = new int[18];

int i;

int j;

int sum;

int remainder;

for (i = 1; i < 18; i++)



j = 17 - i;

idcd[i] = Integer.parseInt(id17.substring(j, j + 1));



sum = 0;

for (i = 1; i < 18; i++)



sum = sum + idcd[i] * factor[i];



remainder = sum % 11;

String lastCheckBit = String.valueOf(code[remainder]);

return id17 + lastCheckBit;



/**
*
* 判断是否是有效的18位或15位居民身份证号码
*
* @param identityId
* :18位或15位居民身份证号码
*
* @return:true: 有效的18位或15位居民身份证号码
*/

public static boolean isIdentityId(String identityId)

if (isEmpty(identityId))
return false;

try

if (identityId.length() == 18)

String identityId15 = identityId.substring(0, 6)
+ identityId.substring(8, 17);

// System.out.println("the identityId15 is : "+identityId15);

if (fixPersonIDCode(identityId15).equalsIgnoreCase(identityId))

return true;

else

return false;



else if (identityId.length() == 15)

try

Long.parseLong(identityId);

return true;

catch (Exception ex)

return false;



else

return false;



catch (Exception ex)

return false;





/**
*
* 判断是否为空串""
*/

public static boolean isEmpty(String sValue)

if (sValue == null)
return true;

return sValue.trim().equals("") ? true : false;



public static void main(String[] args)

try

System.out.println(fixPersonIDCode("650103760113073"));// 身份证15位转18位

System.out.println(isIdentityId("650103760113073")); // 否是为有效的15位身份证号

catch (Exception e)

e.printStackTrace();





本回答被提问者采纳

Linux进程5——实模式和保护模式

  早期的Inter芯片只支持1MB内存,采用实模式,采用16bit地址。后来随着技术进步,出现可以访问更多内存的

保护模式芯片,采用32bit地址。为了保持对前面芯片的兼容,Inter支持这两种模式。当芯片启动时,默认处于实模式,

然后OS控制进入保护模式。

  实模式和保护模式的最大区别:

  实模式下,程序地址为真实的物理地址,可以访问任意地址空间,这样不同进程可能访问到其它进程程序,造成

严重错误。

  保护模式下,程序地址为虚拟地址,然后由OS系统管理内存访问权限,这样每个进程只能访问分配给自己的物理

内存空间,保证了程序的安全性。例如Linux系统地址访问采用分页机制,在加载程序时,由OS分配的进程可以访问

的物理页空间,并设置了页目录项和页表项,才能保证程序正常运行。这样程序运行时地址间接地由OS进行管理,防止

进程之间互相影响,全部由OS稳定性保证。

  

以上是关于15身份证号码转18位算法,用java 程序怎样实现即java程序源代码?的主要内容,如果未能解决你的问题,请参考以下文章

java身份证号位数校验

算法提高 身份证号码升级

算法训练:身份证号码升级

用JAVA实现--15位身份证扩展为18位身份证

用JAVA实现--15位身份证扩展为18位身份证

使用java判断输入身份证号位数是不是正确,判断输入是不是有效