输入17位身份证号判断第18位是否正确
时间: 2024-10-08 11:03:21 浏览: 15
在Java中,验证中国18位身份证号码(也称为社会保障号码)的校验规则相当复杂,涉及到生日、地址等信息的计算。最常用的是通过模运算和奇偶校验码来判断校验码是否正确。以下是一个简单的示例,用于检查最后一位校验码:
```java
public class IDCardValidator {
private static final int[] weight = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
private static final String[] checkCode = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
public static boolean isValid(String id) {
if (id == null || id.length() != 18) {
return false;
}
int sum = 0;
for (int i = 0; i < 17; i++) {
char digit = id.charAt(i);
if (Character.isDigit(digit)) {
sum += weight[i] * Character.getNumericValue(digit);
} else if (digit.equals(checkCode[0])) {
// 对于19位补丁号,直接忽略
} else {
return false;
}
}
// 取余数并转换为对应字符
char checkCodeChar = checkCode[(sum % 11) <= 1 ? sum % 11 : 11 - sum % 11];
return id.charAt(17).equals(checkCodeChar);
}
}
```
这个函数首先检查身份证号码的长度是否为18,然后逐个计算每个位置上的值(包括出生日期和顺序码),加上对应的权重。最后,根据计算结果的除以11后的余数决定生成的校验码是否正确。
阅读全文