public static void calcIdCardLastNum(String idCardNum18) {
int[] quan = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] idNumCharArray = idCardNum18.toCharArray();
char[] checkCode = new char[]{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int sum = 0;
for (int i = 0, length = quan.length; i < length; i++) {
sum += quan[i] * (idNumCharArray[i] - '0');
}
int remain = sum % 11;
System.out.println(remain);
System.out.println(checkCode[remain]);
}
另外记录java中char转int的方法:
因为在测试这个方法中,错误的使用了Integer.valueOf(idNumCharArray[1]) 去转化,这个的意思是获取字符对应的ASCII码值,而不是获取char字面上的值。
可以使用:
Integer.parseInt(String.valueOf(idNumCharArray[i]))
或者是
idNumCharArray[i] - '0'
本文介绍了一种计算18位中国身份证最后一位校验码的方法,通过特定的权重数组和校验码数组进行运算,确保身份证号码的有效性。同时,纠正了在实现过程中常见的char类型转换为int类型的错误做法。
478

被折叠的 条评论
为什么被折叠?



