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位数字进行计算得出的,校验位的计算规则如下:
- 将身份证号码的前17位数字分别乘以对应的加权因子:
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
。 - 将上述结果求和。
- 将上述结果除以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 =