Java 将15位身份证号转化为18位返回,非15位身份证号原值返回

  1. /* 
  2. 身份证号码的结构和表示形式
     
  3. 1、号码的结构
     
  4.    公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
     
  5. 2、地址码
     
  6.    表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
     
  7. 3、出生日期码
     
  8.    表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
     
  9. 4、顺序码
     
  10.    表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
     
  11. 5、校验码
     
  12.  (1)十七位数字本体码加权求和公式
     
  13.       S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
     
  14.       Ai:表示第i位置上的身份证号码数字值
     
  15.       Wi:表示第i位置上的加权因子
     
  16.       Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
     
  17.  (2)计算模
     
  18.       Y = mod(S, 11)
     
  19.  (3)通过模得到对应的校验码
     
  20.       Y: 0 1 2 3 4 5 6 7 8 9 10
     
  21.          校验码: 1 0 X 9 8 7 6 5 4 3 2
     
  22. */  
  23. /** 
  24.  * 将15位身份证号转化为18位返回,非15位身份证号原值返回 
  25.  * @author InJavaWeTrust 
  26.  * 
  27.  */  
  28. public class Ic {  
  29.       
  30.     /** 
  31.      * 将15位身份证号转化为18位返回,非15位身份证号原值返回 
  32.      * @param identityCard 
  33.      * @return 
  34.      */  
  35.     public static String get18Ic(String identityCard) {  
  36.         String retId = "";  
  37.         String id17 = "";  
  38.         int sum = 0;  
  39.         int y = 0;  
  40.         // 定义数组存放加权因子(weight factor)  
  41.         int[] wf = { 7910584216379105842 };  
  42.         // 定义数组存放校验码(check code)  
  43.         String[] cc = { "1""0""X""9""8""7""6""5""4""3""2" };  
  44.         if (identityCard.length() != 15) {  
  45.             return identityCard;  
  46.         }  
  47.         // 加上两位年19  
  48.         id17 = identityCard.substring(06) + "19" + identityCard.substring(6);  
  49.         // 十七位数字本体码加权求和  
  50.         for (int i = 0; i < 17; i++) {  
  51.             sum = sum + Integer.valueOf(id17.substring(i, i + 1)) * wf[i];  
  52.         }  
  53.         // 计算模  
  54.         y = sum % 11;  
  55.         // 通过模得到对应的校验码 cc[y]  
  56.         retId = id17 + cc[y];  
  57.         return retId;  
  58.     }  
  59.       
  60.     public static void main(String[] args) {  
  61.         // 例子 511702800222130  
  62.         System.out.println(get18Ic("511702800222130"));  
  63.         // 结果 511702198002221308  
  64.     }  
  65.   
  66. }  

你可能感兴趣的:(JAVA)