java身份证号码校验
时间: 2024-10-08 09:03:10 浏览: 46
JAVA身份证号码校验类
在Java中,对身份证号码进行校验通常会检查其结构是否符合规定的18位或15位数字规则,并通过算法验证其中包含的校验码。中国身份证号码有固定格式,前6位代表地区,接下来8位代表出生日期,倒数第2位是性别标识(奇数为男,偶数为女),最后一位是根据前面的信息计算出来的校验码。
常见的校验算法包括:
1. 第17位单向校验码:利用特定公式计算得到,根据奇偶性有不同的计算规则。
2. 第18位校验码:对于18位号码,有时会出现X代替0的情况,这是为了防止输入错误。校验时需要考虑这个特殊规则。
下面是一个简单的例子,展示如何使用正则表达式配合计算校验码:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IDValidator {
private static final String[] WEIGHTS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
private static final Pattern ID_PATTERN = Pattern.compile("\\d{15}(\\d|X|x)?");
public static boolean isValid(String id) {
Matcher matcher = ID_PATTERN.matcher(id);
if (!matcher.matches()) return false;
int sum = 0;
for (int i = 0; i < 17; i++) {
int digit = Character.getNumericValue(id.charAt(i)) * WEIGHTS[i];
sum += digit;
}
if (id.length() == 18 && id.charAt(17) != 'X') {
int lastDigit = Character.getNumericValue(id.charAt(17));
return (sum % 11 == lastDigit);
} else {
return sum % 11 == 0; // 对于15位号码,直接除以11看余数是否为0
}
}
public static void main(String[] args) {
System.out.println(isValid("123456789012345678")); // 输出:true 或 false
}
}
```
阅读全文