/**
*身份证号码最后一位的计算方法
*1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:
* 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2.
*2、将这17位数字和系数相乘的结果相加。
*3、用相加的和除以11.看余数是多少?
*4、余数只可能是0-10这11个数字。这11个数字分别对应的最后一位身份证号码为:
* 1-0-X-9-8-7-6-5-4-3-2.
*/
import java.util.*;
class IdCardDemo
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
System.out.print("请输入18位的身份证号:");
int count = 0;//记录校验次数,最多三次
while(true)
{
//通过键盘录入获取身份证号码。
String id = console.nextLine();
if(verify(id))
{
System.out.println("合法身份证号!");
break;
}
else
{
System.out.println("非法身份证号!");
if(++count==3)
break;
System.out.print("请重新输入身份证号:");
}
}
}
//定义方法verify,此方法计算出id的最后一位和输入的最后一位是否一致,相同返回true,不同返回false
public static boolean verify(String id)
{
if(id.length()!=18)
return false;
//定义每位身份证号码的系数
int[] w = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int sum = 0;
for(int i = 0;i<w.length;i++)
{
//将每一位身份证号和对应系数相乘之后相加求和,注意”charAt(i)-'0':将字符数字转换成数字
sum+=(id.charAt(i)-'0')*w[i];
}
int c = sum%11;
char[] ch = {'1','0','X','9','8','7','6','5','4','3','2'};
char code = ch[c];
//因程序中给出的最后一位为大写的'X',而用户可能输入小写x,所以如果最后一位是x,统一转成大写的进行判断。
char last = id.charAt(17);
last = last== 'x'?'X':last;
return last == code;
}
}
|