昨天帮同学编了一个小程序,主要是为了完成把身份证号码由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''
写完这些,连自己都有点晕,希望以后就算能记住了,汗……
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''
写完这些,连自己都有点晕,希望以后就算能记住了,汗……