0
点赞
收藏
分享

微信扫一扫

java身份证号码校验位计算

49路末班车 2023-08-11 阅读 61

Java身份证号码校验位计算

介绍

身份证号码是中国居民的唯一标识,由18位数字组成。其中,前17位为身份证号码的主体部分,最后一位为校验位。校验位的计算方法是根据前17位的数字进行运算得出的一个数字,用于验证身份证号码是否合法。本篇文章将介绍如何使用Java编写一个身份证号码校验位计算的程序,并对计算过程进行详细说明。

计算校验位的方法

计算身份证号码的校验位需要依赖一组数字权重和取模运算。具体的计算方法如下:

  1. 将身份证号码的前17位数字分别乘以对应的权重,权重的计算公式为:$$weight = 2^{i-1} \mod 11$$其中,i表示数字的位置,从左往右依次为1到17。

    位置 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
    权重 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  2. 将上一步得到的结果求和,得到一个总和值sum。

  3. 将sum除以11取余数remainder,即sum % 11。

  4. 根据余数的值,查找对应的校验位,并将其作为身份证号码的最后一位。

    余数 校验位
    1
    1
    2 X
    3 9
    4 8
    5 7
    6 6
    7 5
    8 4
    9 3
    10 2

Java代码示例

下面是使用Java编写的一个身份证号码校验位计算的示例代码:

public class IDCardValidator {
    private static final int[] WEIGHTS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};

    public static boolean validate(String idCardNumber) {
        if (idCardNumber.length() != 18) {
            return false;
        }

        int sum = 0;
        for (int i = 0; i < 17; i++) {
            char c = idCardNumber.charAt(i);
            if (!Character.isDigit(c)) {
                return false;
            }
            int digit = c - '0';
            sum += digit * WEIGHTS[i];
        }

        int remainder = sum % 11;
        char expectedCheckDigit = getCheckDigit(remainder);
        char actualCheckDigit = idCardNumber.charAt(17);
        return expectedCheckDigit == actualCheckDigit;
    }

    private static char getCheckDigit(int remainder) {
        switch (remainder) {
            case 0:
                return '1';
            case 1:
                return '0';
            case 2:
                return 'X';
            case 3:
                return '9';
            case 4:
                return '8';
            case 5:
                return '7';
            case 6:
                return '6';
            case 7:
                return '5';
            case 8:
                return '4';
            case 9:
                return '3';
            case 10:
                return '2';
            default:
                throw new IllegalArgumentException("Invalid remainder: " + remainder);
        }
    }
}

上述代码中,validate方法接收一个身份证号码作为参数,返回一个布尔值,表示该身份证号码是否合法。代码首先检查身份证号码的长度是否为18位,如果不是,则直接返回false。然后,使用循环遍历前17位数字,根据权重计算出一个总和值sum。最后,通过求余数和查找校验位的

举报

相关推荐

0 条评论