java查验身份证(身份证号码的校验码)代码
时间: 2024-09-19 18:03:46 浏览: 36
在Java中验证身份证号码的有效性通常涉及到中国居民身份证的校验规则,包括18位数字的结构、奇偶校验以及区域码的判断。以下是一个简化的例子,展示了如何检查身份证号码的基本格式和校验码:
```java
import java.util.regex.Pattern;
public class IDCardValidator {
private static final String ID_CARD_PATTERN = "(^\\d{15}$)|(^\\d{18}$)";
private static final int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
private static final String checkCodeFormula = "X{2}";
public static boolean isValid(String id) {
if (Pattern.matches(ID_CARD_PATTERN, id)) {
// 验证偶数位加权求和
int sum = 0;
for (int i = 0; i < id.length(); i++) {
if (i % 2 == 0) {
char num = id.charAt(i);
if (Character.isDigit(num)) {
sum += Integer.parseInt(num + "");
} else if (num.equals(checkCodeFormula.charAt(i))) {
continue;
} else {
return false;
}
} else {
char num = id.charAt(i);
if (Character.isDigit(num)) {
sum += weights[i / 2] * Integer.parseInt(num + "");
} else {
return false;
}
}
}
// 求余数,如果等于10,则取模11后的结果作为校验码
int remainder = sum % 11;
if (remainder == 10) {
remainder = 0;
}
// 判断最后一位是否等于计算出的校验码
return id.charAt(id.length() - 1).equals(Integer.toString(remainder));
}
return false;
}
public static void main(String[] args) {
System.out.println(isValid("123456789012345678")); // 测试示例
}
}
```
注意,这个代码片段只检查了基本的格式和简单的校验规则,实际应用中还需要考虑出生日期合法性等其他因素,并可能需要连接到数据库或其他服务进行更严格的验证。
阅读全文