Java身份证号验证

1. 简介

在中国,身份证号是公民身份的唯一标识。身份证号由18位数字组成,前17位是行政区划代码和出生年月日,最后一位是校验码。校验码根据前17位计算得出,用于检验身份证号的合法性。

本文将介绍使用Java编程语言验证身份证号的方法。通过编写一段简单的代码,我们可以判断一个身份证号是否合法。

2. 身份证号的结构

身份证号的结构如下所示:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

其中,每一位的含义如下:

  • 1-6位:行政区划代码,代表身份证号所在地区的行政区划。
  • 7-14位:出生年月日,代表持证人的出生日期。
  • 15-17位:顺序码,代表在同一地区、同一生日出生的人的顺序号。
  • 18位:校验码,用于验证身份证号的合法性。

3. 身份证号的校验规则

校验码是根据前17位数字计算出来的,它的计算规则如下:

  1. 将身份证号的前17位数分别乘以对应的权重系数,再将乘积相加。
  2. 将所得结果除以11,求得余数。
  3. 根据余数的值查找一个预先定义好的校验码字符,将其与身份证号的最后一位校验码进行比较,如果相等则身份证号合法,否则不合法。

权重系数的计算方法如下:

权重系数 = 2^i % 11

其中,i的取值范围是0到16。

4. Java代码实现

下面的代码是一个简单的Java程序,用于验证身份证号的合法性:

public class IDCardValidator {
    
    public static boolean validate(String idCard) {
        if (idCard == null || idCard.length() != 18) {
            return false;
        }
        
        // 身份证号的前17位数
        String code = idCard.substring(0, 17);
        // 身份证号的校验码
        char checkCode = idCard.charAt(17);
        
        // 权重系数
        int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        
        // 计算校验码
        int sum = 0;
        for (int i = 0; i < code.length(); i++) {
            int digit = Character.digit(code.charAt(i), 10);
            sum += digit * weights[i];
        }
        int remainder = sum % 11;
        char calculatedCheckCode = getCheckCode(remainder);
        
        return checkCode == calculatedCheckCode;
    }
    
    private static char getCheckCode(int remainder) {
        switch (remainder) {
            case 0:
                return '1';
            case 1:
                return '0';
            case 2:
                return 'X';
            default:
                return (char) ((12 - remainder) + '0');
        }
    }
    
    public static void main(String[] args) {
        String idCard = "11010119900307001X";
        boolean isValid = validate(idCard);
        System.out.println("身份证号是否合法:" + isValid);
    }
}

在上面的代码中,我们定义了一个IDCardValidator类,其中包含了一个静态方法validate用于验证身份证号的合法性。该方法接受一个身份证号作为参数,判断其是否合法并返回一个布尔值。

代码中的main方法演示了如何使用validate方法进行身份证号的验证。

5. 类图

下面是IDCardValidator类的类图:

classDiagram
    class IDCardValidator {
        - validate(String): boolean
        - getCheckCode(int): char
    }

6. 甘特图

下面是验证