JAVA 18位身份证号码校验码的算法

我将为你详细讲解“JAVA 18位身份证号码校验码的算法”的完整攻略。

我将为你详细讲解“JAVA 18位身份证号码校验码的算法”的完整攻略。

什么是身份证号码校验码

身份证号码由17位数字和1位校验码组成(18位)。其中,前17位为身份证号码,最后一位为校验码。校验码一般都是用来检验身份证号码的正确性,通过校验码可以判断一个身份证号码是否是正确的身份证号码。

JAVA 18位身份证号码校验码算法

校验码的计算规则如下:

  1. 将前17位数字分别乘以对应的系数,系数如下:[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
  2. 将每个乘积相加。
  3. 将和除以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位身份证号码校验码的算法

基础教程推荐