身份证验证小程序

@Test 
       public void v erificationNumber(){
/*
 *  大家好,今天大家分享一个Java小程序,身份证验证真伪。 emmmm...
 *  那么通过下面的代码呢就能验证一个身份证的号码是否是合格的。
 * 
 * 判断一个身份证是否是一个合法的身份证号码有以下几个步骤需要用程序验证:
 * A:18位 
 * 
 * B:前17位全是数字
 * 
 * C:验证最后一位:
 * 
 * 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-1-2-3-4-5-6-7-8-9-10这11个数字。
 * 其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2。
 *
 * 5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。
 * 如果对应的数字是10,身份证的最后一位号码就是罗马数字x。
 * 
 *  ^_^ ^_^ ^_^ ^_^ ^_^ ^_^
 */
// 输入身份证
String id = "123456789123456789"; // 你可以输入自己的身份证测试一下哦
// 调用验证真假的方法
boolean b = id(id);
System.out.println(b);
}

// 写一个验证身份证真假的方法(需要用户传入参数)
public static boolean id(String id) {
// 有的身份证尾数是大写的X,所以先将大写转为小写
id = id.toLowerCase();
// 判断是否是18位,如果没有18位,就返回false
if (!(id.length() == 18)) {
return false;
}
// 循环遍历前十七位
for (int i = 0; i < id.length() - 1; i++) {
// 取出当前遍历的这一位
char c = id.charAt(i);
// 判断否是数字,如果不是数字,就返回false
if (!(Character.isDigit(c))) {
return false;
}
}
// 先定义一个数组来存放需要乘的系数
char[] type = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
// 定义一个变量来存 乘得的结果
int total = 0;
// 循环遍历前17位
for (int i = 0; i < id.length() - 1; i++) {
// 取出当前遍历的这一位数
char c1 = id.charAt(i);
// 因为当前取出的数字是字符类型的,所以需要按照ASCII码进行转换
int j = c1 - 48;
// 将取出来的数和数组中对应的数字进行相乘之后累加
total += j * type[i];
}
// 用加出来和模以11
int total2 = total % 11;
// 定义一个数组来存放取模后可能取得的数字
char[] num = { '1', '0', 'x', '9', '8', '7', '6', '5', '5', '4', '3', '2' };
// 循环遍历这个数组
for (int i = 0; i < num.length; i++) {
// 取出这个数组中的取模后的那个数字
char c = num[total2];
// 取出身份证最后一位
char c2 = id.charAt(17);
// 判断是否相同,如果不相同,就返回false
if (!(c == c2)) {
return false;
}
}
// 如果以上条件都满足,说明这个身份证是真的,就返回true
return true;
}

猜你喜欢

转载自blog.csdn.net/qq_42358301/article/details/80530984