如何使用Java函数验证身份证号是否合法?
发布时间:2023-07-22 03:53:21
要验证身份证号是否合法,可以使用Java函数来实现。以下是一个示例函数,用于验证身份证号的合法性。
public class IDCardValidator {
public static boolean isValidIDCard(String idCardNumber) {
// 身份证号不能为空
if (idCardNumber == null || idCardNumber.isEmpty()) {
return false;
}
// 身份证号长度不合法
if (idCardNumber.length() != 18) {
return false;
}
// 身份证号前17位应为数字
String idCardDigits = idCardNumber.substring(0, 17);
if (!idCardDigits.matches("[0-9]+")) {
return false;
}
// 身份证号最后一位校验位验证
String idCardLastDigit = idCardNumber.substring(17);
if (!isValidLastDigit(idCardDigits, idCardLastDigit)) {
return false;
}
return true;
}
private static boolean isValidLastDigit(String idCardDigits, String idCardLastDigit) {
// 权重因子
int[] weightFactors = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// 校验位映射表
String[] checkCodeMap = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
int sum = 0;
for (int i = 0; i < idCardDigits.length(); i++) {
sum += Integer.parseInt(idCardDigits.substring(i, i + 1)) * weightFactors[i];
}
int mod = sum % 11;
if (idCardLastDigit.equals(checkCodeMap[mod])) {
return true; // 校验通过
} else {
return false; // 校验失败
}
}
public static void main(String[] args) {
// 测试样例
String idCardNumber = "420323199001011234";
if (isValidIDCard(idCardNumber)) {
System.out.println("身份证号合法");
} else {
System.out.println("身份证号不合法");
}
}
}
该示例函数的工作原理如下:
1. 首先检查身份证号是否为空,如果为空则返回false。
2. 然后检查身份证号的长度是否为18位,如果不是则返回false。
3. 接下来检查身份证号前17位是否为数字,如果不是则返回false。
4. 最后校验身份证号的最后一位校验位,校验位的计算方式为将前17位数字与权重因子相乘并求和,然后计算该和除以11的余数,再根据校验位映射表判断校验位是否正确。如果校验通过则返回true,否则返回false。
可以在main方法中测试该函数的功能,输入一个身份证号,如果返回true则表示身份证号合法,否则表示身份证号不合法。
这个函数可以用来验证大部分的18位身份证号,但并不能完全保证校验结果的准确性。在实际使用时还需注意其他规则,如地区码、生日等的验证。
