用java校验18位身份证号码
时间: 2023-05-28 17:01:05 浏览: 248
以下是Java代码,用于校验18位身份证号码:
```
public static boolean checkIdNumber(String idNumber) {
// 18位身份证号码正则表达式,符合GB11643-1999标准
String regex = "^[1-9]\\d{5}(19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
// 判断身份证号码是否为空或不符合正则表达式
if (idNumber == null || !idNumber.matches(regex)) {
return false;
}
// 判断身份证号码的最后一位校验码是否正确
int[] factors = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; // 加权因子
char[] checkCodes = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '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; // 取模
char checkCode = checkCodes[remainder]; // 获取校验码
return (idNumber.charAt(17) == checkCode || idNumber.charAt(17) == Character.toUpperCase(checkCode)); // 判断校验码是否正确
}
```
该方法的返回值为`true`表示身份证号码正确,返回值为`false`表示身份证号码不正确。