//java-校验18位身份证号
public static boolean checkIdCard18(String value) {
if(value==null||value.length() !=18){
return false;
}
int[] arrExp =new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//加权因子
String[] arrValid =new String[]{"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}; //校验码
String reg="^\\d{17}[\\d|X|x$]";
if(value.matches(reg)){
int sum = 0, idx;
for(int i = 0; i < value.length() - 1; i++){
// 对前17位数字与权值乘积求和
sum += Integer.parseInt(value.substring(i, (i+1)), 10) * arrExp[i];
}
// 计算模(固定算法)
idx = sum % 11;
// 检验第18为是否与校验码相等
return arrValid[idx].equals(value.substring(17).toUpperCase());
}else{
return false;
}
}
//js-校验18位身份证号
function check_id_card(value){
if(!value||value.length !=18){
return false;
}
var arrExp = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//加权因子
var arrValid = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];//校验码
if(/^\d{17}\d|X|x$/i.test(value)){
var sum = 0, idx;
for(var i = 0; i < value.length - 1; i++){
// 对前17位数字与权值乘积求和
sum += parseInt(value.substr(i, 1), 10) * arrExp[i];
}
// 计算模(固定算法)
idx = sum % 11;
console.log(arrValid[idx])
// 检验第18为是否与校验码相等
return arrValid[idx] == value.substr(17, 1).toUpperCase();
}else{
return false;
}
}