欢迎访问宙启技术站
智能推送

Java函数实现身份证号码的校验算法

发布时间:2023-06-10 21:16:21

Java函数实现身份证号码的校验算法

身份证号码是一组用于唯一识别中国公民身份的标识号码,由18位数字和字母组成。身份证号码在身份证的管理和使用中起着举足轻重的作用,因为身份证号码一旦被泄露或用于非法目的,将对公民的身份安全、个人隐私等产生严重的影响。因此,对身份证号码的合法性进行校验是非常必要的。

Java作为一种流行的编程语言,提供了丰富的字符串操作函数,可以很方便地实现身份证号码的校验算法。下面我们来介绍一下Java如何实现身份证号码的校验。

身份证号码的校验算法主要包括以下几个步骤:

1. 将身份证号码分解成17个数字和1个校验位。

2. 分别对这17个数字乘以不同系数,然后将乘积相加得到一个和值。

3. 将和值除以11,得到的余数与校验位进行比较。如果相等,则身份证号码合法,否则不合法。

下面是Java函数实现身份证号码的校验算法的示例代码:

public static boolean isValidIDCard(String idCard) {

    // 判断长度是否合法

    if (idCard.length() != 18) {

        return false;

    }

    // 将身份证号码分解成17个数字和1个校验位

    String num17 = idCard.substring(0, 17);

    String checkDigit = idCard.substring(17);

    // 判断前17位是否全部为数字

    for (int i = 0; i < num17.length(); i++) {

        if (!Character.isDigit(num17.charAt(i))) {

            return false;

        }

    }

    // 分别对前17位数字乘以不同系数,然后将乘积相加得到一个和值

    int sum = 0;

    for (int i = 0; i < 17; i++) {

        sum += (num17.charAt(i) - '0') * factor[i];

    }

    // 将和值除以11,得到的余数与校验位进行比较

    int remainder = sum % 11;

    String digit = checkDigits[remainder];

    return digit.equalsIgnoreCase(checkDigit);

}

其中,factor和checkDigits是两个数组,分别为身份证号码前17位数字乘以不同系数和所对应的校验位。具体实现如下:

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

private static final String[] checkDigits = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };

现在我们来测试一下这个函数,看看它是否能够正确判断身份证号码的合法性。下面是测试代码:

public static void main(String[] args) {

    String idCard1 = "11010519491231002X";

    String idCard2 = "110105194912310021";

    System.out.println("idCard1 is valid: " + isValidIDCard(idCard1));

    System.out.println("idCard2 is valid: " + isValidIDCard(idCard2));

}

输出结果如下:

idCard1 is valid: true

idCard2 is valid: false

从输出结果可以看出,第一个身份证号码是合法的,而第二个身份证号码是不合法的。这证明我们的函数实现是正确的。

综上所述,Java函数实现身份证号码的校验算法并不难,只需按照上述步骤编写相应代码即可。然而,需要注意的是,身份证号码的校验算法并不是绝对可靠的,因为有些假身份证号码也能通过校验。因此,在实际应用中,我们还需要结合其他方式对身份证号码进行验证,以确保身份证号码的真实性和合法性。