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判断身份证号是否合法
猜你喜欢
转载自blog.csdn.net/Abracadabra__/article/details/85264658
今日推荐
周排行