我将为你详细讲解“JAVA 18位身份证号码校验码的算法”的完整攻略。
什么是身份证号码校验码
身份证号码由17位数字和1位校验码组成(18位)。其中,前17位为身份证号码,最后一位为校验码。校验码一般都是用来检验身份证号码的正确性,通过校验码可以判断一个身份证号码是否是正确的身份证号码。
JAVA 18位身份证号码校验码算法
校验码的计算规则如下:
- 将前17位数字分别乘以对应的系数,系数如下:
[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
。 - 将每个乘积相加。
- 将和除以11,取余数。余数对应的数字如下:
[1,0,X,9,8,7,6,5,4,3,2]
。其中,X对应的是10。
通过以上算法,即可得到最后一位校验码。
下面是JAVA代码示例:
public class IdCardUtils {
private static final int[] FACTORS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
private static final int[] CHECK_CODES = {1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2};
/**
* 计算18位身份证号码的校验码
* @param idCardNo 前17位身份证号码
* @return 校验码
*/
public static String getCheckCode(String idCardNo) {
int sum = 0;
for (int i = 0; i < idCardNo.length(); i++) {
char c = idCardNo.charAt(i);
int n = c - '0';
int factor = FACTORS[i];
sum += n * factor;
}
int idx = sum % 11;
return idx == 2 ? "X" : String.valueOf(CHECK_CODES[idx]);
}
}
示例说明
下面是两个示例说明:
示例一
假设身份证号码的前17位是110101197001016854
,则校验码的计算过程如下:
1. 分别将前17位数字和对应的系数相乘,并将乘积相加。
1 * 7 + 1 * 9 + 0 * 10 + 1 * 5 + 0 * 8 + 1 * 4 + 1 * 2 + 9 * 1 + 7 * 6 + 0 * 3 + 0 * 7 + 1 * 9 + 6 * 10 + 8 * 5 + 5 * 8 + 4 * 4 + 2 * 2 = 238
2. 将和除以11,取余数。238 % 11 = 4。
3. 根据余数查找校验码对应的数字。校验码数组的下标从0开始,因此查找CHECK_CODES[4],得到3。
4. 所以,校验码为3。
5. 因此,身份证号码为1101011970010168543。
示例二
假设身份证号码的前17位是62072119880320726
,则校验码的计算过程如下:
1. 分别将前17位数字和对应的系数相乘,并将乘积相加。
6 * 7 + 2 * 9 + 0 * 10 + 7 * 5 + 2 * 8 + 1 * 4 + 1 * 2 + 9 * 1 + 8 * 6 + 8 * 3 + 0 * 7 + 3 * 9 + 2 * 10 + 0 * 5 + 7 * 8 + 2 * 4 + 6 * 2 = 356
2. 将和除以11,取余数。356 % 11 = 8。
3. 根据余数查找校验码对应的数字。校验码数组的下标从0开始,因此查找CHECK_CODES[8],得到4。
4. 所以,校验码为4。
5. 因此,身份证号码为620721198803207264。
以上就是JAVA 18位身份证号码校验码算法的详细攻略。希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA 18位身份证号码校验码的算法 - Python技术站