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

如何使用Java函数验证身份证号是否合法?

发布时间:2023-07-22 03:53:21

要验证身份证号是否合法,可以使用Java函数来实现。以下是一个示例函数,用于验证身份证号的合法性。

public class IDCardValidator {

    public static boolean isValidIDCard(String idCardNumber) {
        // 身份证号不能为空
        if (idCardNumber == null || idCardNumber.isEmpty()) {
            return false;
        }

        // 身份证号长度不合法
        if (idCardNumber.length() != 18) {
            return false;
        }

        // 身份证号前17位应为数字
        String idCardDigits = idCardNumber.substring(0, 17);
        if (!idCardDigits.matches("[0-9]+")) {
            return false;
        }

        // 身份证号最后一位校验位验证
        String idCardLastDigit = idCardNumber.substring(17);
        if (!isValidLastDigit(idCardDigits, idCardLastDigit)) {
            return false;
        }

        return true;
    }

    private static boolean isValidLastDigit(String idCardDigits, String idCardLastDigit) {
        // 权重因子
        int[] weightFactors = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        // 校验位映射表
        String[] checkCodeMap = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
        
        int sum = 0;
        for (int i = 0; i < idCardDigits.length(); i++) {
            sum += Integer.parseInt(idCardDigits.substring(i, i + 1)) * weightFactors[i];
        }

        int mod = sum % 11;
        if (idCardLastDigit.equals(checkCodeMap[mod])) {
            return true; // 校验通过
        } else {
            return false; // 校验失败
        }
    }

    public static void main(String[] args) {
        // 测试样例
        String idCardNumber = "420323199001011234";
        if (isValidIDCard(idCardNumber)) {
            System.out.println("身份证号合法");
        } else {
            System.out.println("身份证号不合法");
        }
    }
}

该示例函数的工作原理如下:

1. 首先检查身份证号是否为空,如果为空则返回false

2. 然后检查身份证号的长度是否为18位,如果不是则返回false

3. 接下来检查身份证号前17位是否为数字,如果不是则返回false

4. 最后校验身份证号的最后一位校验位,校验位的计算方式为将前17位数字与权重因子相乘并求和,然后计算该和除以11的余数,再根据校验位映射表判断校验位是否正确。如果校验通过则返回true,否则返回false

可以在main方法中测试该函数的功能,输入一个身份证号,如果返回true则表示身份证号合法,否则表示身份证号不合法。

这个函数可以用来验证大部分的18位身份证号,但并不能完全保证校验结果的准确性。在实际使用时还需注意其他规则,如地区码、生日等的验证。