Java 正则表达式验证身份证

本文将教会你如何使用 Java 正则表达式来验证身份证号码。首先,我们来了解一下整个流程,然后逐步介绍每个步骤的实现方法。

流程说明

下面是验证身份证号码的流程,我们可以使用一个表格来展示:

步骤 描述
1 从用户输入中获取身份证号码
2 使用正则表达式验证身份证号码格式
3 进行身份证号码校验计算
4 验证校验位是否正确

接下来,我们将详细介绍每个步骤的实现方法。

步骤一:获取身份证号码

在这一步中,我们需要从用户输入中获取身份证号码。你可以使用 Java 的 Scanner 类来实现这个功能。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入身份证号码:");
        String idNumber = scanner.nextLine();
        
        // 这里的 idNumber 就是用户输入的身份证号码
    }
}

在上述代码中,我们使用了 Scanner 类来获取用户的输入,并将输入的内容存储在 idNumber 变量中。

步骤二:验证身份证号码格式

使用正则表达式来验证身份证号码的格式非常方便。身份证号码的格式一般为18位数字,最后一位可能是数字或字母X。下面是验证身份证号码格式的代码:

String regex = "^\\d{17}(\\d|X)$";
boolean isValid = idNumber.matches(regex);

if (isValid) {
    // 身份证号码格式正确
} else {
    // 身份证号码格式错误
}

在上述代码中,我们使用了正则表达式 ^\\d{17}(\\d|X)$ 来验证身份证号码的格式。其中,^ 表示匹配字符串的开头,\\d{17} 表示匹配17位数字,(\\d|X) 表示匹配一个数字或字母X,$ 表示匹配字符串的结尾。matches() 方法用于判断字符串是否与正则表达式匹配。

步骤三:身份证号码校验计算

身份证号码的校验位是通过对前17位数字进行计算得出的,校验位的计算规则如下:

  1. 将身份证号码的前17位数字分别乘以对应的加权因子:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  2. 将上述结果求和。
  3. 将上述结果除以11并取余数,根据余数查找对应的校验位。

下面是校验位计算的代码:

int[] factors = {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 < 17; i++) {
    int digit = Character.getNumericValue(idNumber.charAt(i));
    sum += digit * factors[i];
}

int remainder = sum % 11;

在上述代码中,我们首先定义了加权因子数组 factors,然后遍历身份证号码的前17位数字,将每位数字与对应的加权因子相乘并求和。最后,使用求和结果除以11并取余数,得到校验位计算的结果。

步骤四:验证校验位是否正确

最后一步是验证校验位是否正确。校验位的取值范围是0-10,其中10表示字母X。下面是验证校验位的代码:

char[] checkDigits = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
char expectedCheckDigit =