如何验证中国公民身份证是否符合格式要求?提供一个可靠的方法

5 min read

以下是一个示例方法,可用于验证中国公民身份证格式是否正确:

public static boolean validateIdCard(String idCard) {
    // 校验身份证长度和格式
    String regex = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\\d|3[0-1])\\d{3}[\\dX]";
    if (!idCard.matches(regex)) {
        return false;
    }

    // 校验身份证校验码,根据 GB 11643-1999 标准计算
    int[] factors = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
    char[] checkCodes = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
    int sum = 0;
    for (int i = 0; i < 17; i++) {
        int digit = idCard.charAt(i) - '0';
        sum += digit * factors[i];
    }
    char checkCode = checkCodes[sum % 11];
    return checkCode == idCard.charAt(17);
}

该方法使用正则表达式校验身份证号码格式,并使用 GB 11643-1999 标准计算校验码进行校验。如果身份证格式正确且校验码正确,则返回 true;否则返回 false。