Java中,如何设置正则表达式来匹配身份证号码?
时间: 2024-12-22 14:19:12 浏览: 18
在Java中,可以使用`java.util.regex`包下的`Pattern`和`Matcher`类来设置正则表达式来匹配身份证号码。中国的身份证号码通常由18位数字组成,分为三部分:前6位代表地区码,中间8位代表出生日期加顺序码,最后4位是校验码。这里是一个简单的例子:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IDCardValidation {
private static final String regex = "(\\d{6})(\\d{8})(\\d{4})"; // 匹配模式:六个数字,八个数字,四个数字
public static boolean isValid(String id) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(id);
return matcher.matches() && validateChecksum(id);
}
// 检查校验码是否正确
private static boolean validateChecksum(String id) {
int sumOdd = 0, sumEven = 0;
for (int i = 7; i < 18; i++) {
if (i % 2 == 1) { // 奇数位
sumOdd += Integer.parseInt(id.substring(i, i + 1));
} else { // 偶数位
int digit = Integer.parseInt(id.substring(i, i + 1)) * 2;
if (digit > 9) {
digit -= 9;
}
sumEven += digit;
}
}
int oddSum = sumOdd * 7;
int evenSum = sumEven * 9;
int checkCode = (oddSum + evenSum) % 11;
return id.charAt(17) - '0' == checkCode || id.charAt(17) - 'X' == checkCode; // 对照表,X表示10
}
public static void main(String[] args) {
System.out.println(isValid("110101199001015678")); // 输出:true 或 false
}
}
```
这个示例中的正则表达式只用于匹配结构,实际验证时还需要考虑校验码计算。
阅读全文