Java实现身份证号格式验证

作为一名刚入行的开发者,你可能会遇到需要验证身份证号格式的任务。身份证号是中国公民的法定身份证明,其格式有一定的规律性。本文将指导你如何使用Java来实现身份证号的格式验证。

身份证号格式

中国大陆的第二代居民身份证号码由18位数字组成,其结构如下:

  1. 前6位为行政区划代码。
  2. 接下来的8位为出生日期码,格式为YYYYMMDD。
  3. 紧随其后的3位为顺序码,其中奇数分配给男性,偶数分配给女性。
  4. 最后一位为校验码,根据前17位数字按照特定算法计算得出。

验证流程

以下是实现身份证号格式验证的步骤:

步骤描述
1检查身份证号长度是否为18位
2检查身份证号是否全部由数字组成
3检查出生日期码是否合法
4计算并验证校验码

实现代码

以下是使用Java实现身份证号格式验证的示例代码:

public class IDCardValidator {
    public static boolean validate(String idCard) {
        // 步骤1:检查长度
        if (idCard == null || idCard.length() != 18) {
            return false;
        }

        // 步骤2:检查是否全部由数字组成
        for (int i = 0; i < idCard.length(); i++) {
            if (!Character.isDigit(idCard.charAt(i))) {
                return false;
            }
        }

        // 步骤3:检查出生日期码
        String birthDate = idCard.substring(6, 14);
        if (!isValidBirthDate(birthDate)) {
            return false;
        }

        // 步骤4:计算并验证校验码
        return calculateCheckDigit(idCard) == idCard.charAt(17);
    }

    private static boolean isValidBirthDate(String birthDate) {
        // 这里使用正则表达式来校验日期格式
        return birthDate.matches("\\d{4}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])");
    }

    private static char calculateCheckDigit(String idCard) {
        // 校验码计算逻辑,这里简化处理
        int sum = 0;
        for (int i = 0; i < 17; i++) {
            int num = idCard.charAt(i) - '0';
            sum += (2 - (i % 2)) * num;
        }
        return (12 - (sum % 11)) % 11 + '0';
    }

    public static void main(String[] args) {
        String idCard = "110101199001010011";
        if (validate(idCard)) {
            System.out.println("身份证号格式正确");
        } else {
            System.out.println("身份证号格式错误");
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
代码解释
  • validate 方法是主验证函数,它按照上述步骤进行身份证号格式的验证。
  • isValidBirthDate 方法使用正则表达式来校验出生日期码是否合法。
  • calculateCheckDigit 方法实现了校验码的计算逻辑。

结果展示

以下是使用Mermaid语法生成的饼状图,展示了身份证号各部分所占的比例:

身份证号各部分占比 33% 44% 17% 6% 身份证号各部分占比 行政区划代码 出生日期码 顺序码 校验码

结语

通过本文的学习,你应该已经掌握了如何使用Java来验证身份证号的格式。这只是一个基础的实现,实际应用中可能需要考虑更多的异常情况和优化。希望本文能够帮助你更好地理解和应用身份证号格式验证。