public boolean validate(String idCardNo) {
// 对身份证号进行长度等简单判断
if (idCardNo == null || !PARTTERN_CARD_NO.matcher(idCardNo).matches()) {
return false;
}
int len = idCardNo.length();
// 一代身份证
if (len == 15) {
return PARTTERN_DATE.matcher("19" + idCardNo.substring(6, 12)).matches();
}
// 二代身份证
if (len == 18 && PARTTERN_DATE.matcher(idCardNo.substring(6, 14)).matches()) {
// 判断随机码是否相等
return calculateRandom(idCardNo) == idCardNo.charAt(17);
} else {
return false;
}
}
/**
* 计算最后一位随机码
* @param idCardNo
* @return
*/
private char calculateRandom(String idCardNo) {
// 计算1-17位与相应因子乘积之和
int total = 0;
for (int i = 0; i < 17; i++) {
total += Character.getNumericValue(idCardNo.charAt(i)) * FACTOR[i];
}
// 判断随机码是否相等
return RANDOM[total % 11];
}
}
JAVA判断身份证号是否合法
最新推荐文章于 2022-06-16 11:09:44 发布
本文深入解析了一种用于验证中国身份证号码有效性的算法。该算法首先检查身份证号的长度和格式,然后针对15位和18位身份证号采用不同的验证策略,包括日期格式校验和随机码计算。对于18位身份证号,算法通过特定因子计算随机码并与身份证号最后一位进行比对,确保其一致性。
845

被折叠的 条评论
为什么被折叠?



