黑马程序员技术交流社区
标题:
java实现身份证校验的小程序
[打印本页]
作者:
smhjx2006
时间:
2013-6-5 14:34
标题:
java实现身份证校验的小程序
/**
*身份证号码最后一位的计算方法
*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;
}
}
作者:
袁梦希
时间:
2013-6-5 14:45
哥们很厉害 研究的很深 {:soso_e179:}
作者:
刘正祥
时间:
2013-6-5 17:02
为什么要计算身份证号码最后一位呢?{:soso_e132:}
作者:
曹秀云
时间:
2013-6-15 08:56
刘正祥 发表于 2013-6-5 17:02
为什么要计算身份证号码最后一位呢?
最后一位是计算出来的,像网上的解除防沉迷软件就是这个原理。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2