身份证号码转换程序

来源:互联网 发布:淘宝实名小号购买 编辑:程序博客网 时间:2024/05/20 23:59
        昨天帮同学编了一个小程序,主要是为了完成把身份证号码由15位转换成18位。原来在使用substring函数时总是一带而过,现在遇到麻烦了,归根到底是没仔细看过原文API,现在罗列出来,复习一下!源程序如下:
class IDConvert
{       public static void main(String [] args)
        {
                   String T="";                                                              //18位号码的尾数,由后面计算得出最后取值
                   long R;                                                                     //文章最后有全面的说明
                  String Final_Id_Num;
                  String Id;
                  Id = "120103311222265";
                  long N = 0;
                 String strTailChars = "10x98765432";
       try
      {
             long IdNum = Long.parseLong(Id);
             if (Id.length()!=15)
             throw new Exception();        
      }
      catch(IllegalArgumentException e)
      {
      System.out.println("输入的不是正确参数");
      }
      catch(Exception e1)
      {
      System.out.println("输入的号码位数不正确");
      
      }
     String Id_6_Upper = Id.substring(0,6);                                     //要在原15位号码中加上“19”,拆成两部分
     String Id_9_Lower = Id.substring(6,15);
     String Original_New_Id = Id_6_Upper + "19" + Id_9_Lower;  //变成17位号码
     int v_List[]={2,4,8,5,10,9,7,3,6,1,2,4,8,5,10,9,7};                   //计算尾数的一个数组
        int i,m,repeat=0;
        for(i=0;i<17;i++)
        {
           m=16-repeat;
           //System.out.println(repeat);
           N+= Long.parseLong(Original_New_Id.substring(m,m+1))*(long)v_List[repeat];           //见文尾说明
           //System.out.println(N);
           repeat++;
         }
        R = N%11;                                                  //取模找对应的T值(18位的尾数)
        System.out.println(R);
        for(m=0;m<11;m++)
        {
             if(R==m)
              T = strTailChars.substring(m,m+1);
            
        }
        System.out.println(T);
        Final_Id_Num = Original_New_Id +T;                            //17位的号码+尾数T
        System.out.println(Final_Id_Num);
    }
}

程序的要求及转换规则如下:

身份证号转换由15位到18位.(输入的参数是命令行参数,输出18位身份证号)
错误处理:
a.用户输入的身份证号必须是15位,如果输入有误要给出提示。
b.如果用户输入了非数字字符,给出提示信息。
提示:当字符串转换成数字的函数发生异常,则说明输入了非数字字符。
计算18为身份证号:
身份号15位到18位转换算法:
1.身份证号转换由15位到18位.(输入的参数是命令行参数)
错误处理:
a.用户输入的身份证号必须是15位,如果输入有误要给出提示。
b.如果用户输入了非数字字符,给出提示信息。
提示:当字符串转换成数字的函数发生异常,则说明输入了非数字字符。
1.在6位行政区后插入2位世纪代码(如19),构成四位出生年份,得到17位号码;
2.把17位号码从高位到低位与下列17个数字分别相乘求和(N):
提示: int v_List[]={2,4,8,5,10,9,7,3,6,1,2,4,8,5,10,9,7};
比如:身份证号为:c1c2c3c4......c16c17
则 N=c17x2+c16x4+......+c1x7;
3.将N除以11取余数R,根据余数计算尾数T:
1)如果R=0,则T=1;如果R=2,则T=X;
2)如果R=3,则T=9;......
提示:String strTailChars="10x98765432";
4.将尾数T添加到17位号码后即得到18位号码。


另substring()的应用如下:
        在括号中如果只有一个参数,代表返回值为该字符串对象中与参数对应的位置那个字符至尾字符的字符串。
        exp:  String aa = ''qwerty'';
                aa.substring(2)的返回值为:''erty''

        如果有两个参数,可以这样理解:第一个参数为在原字符串中与参数相对应的位置的那个字符,第二个参数就是从原字符串中,由第一个字符算起一共有几个字符,返回值即为两个参数对应字符之间的那段字符串
        exp: String aa = ''qwertyuiop''
               aa.substring(2,8)的返回值为:''ertyui''
        

写完这些,连自己都有点晕,希望以后就算能记住了,汗……
原创粉丝点击