<body>
输入身份证:<input type="text" id=shenfen>
<script src="../../js/citys.js"></script>
<script>
var sf=document.querySelector("#shenfen")
sf.onblur=function(){
var num=this.value;
var flag=checkId(num);
if(!flag){
alert("身份证信息有错误")
}
}
/*
18位: 41072419980815451x
410724 1998 0815 451x
41:省编码前2位
4107:市编码前4位
410724:县编码
45:派出所编码
1:奇数为男,偶数为女
x:计算所得
1、将前面的身份证号码17位数分别乘以不同的系数。
从第一位到第十七位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2;
2、将这17位数字和系数相乘的结果相加;
3、用加出来和除以11,看余数是多少;
4、余数只可能有0、1、2、3、4、5、6、7、8、9、10这11个数字,
其分别对应的最后一位身份证的号码为1、0、X、9、8、7、6、5、4、3、2。
*/
function checkId(ID) {
if (ID.length != 18) {
return false;
}
//获取身份证前两位,省编码
var provinceCode = ID.substr(0, 2);
//获取省的数组
var provinces = citys.districts[0].districts;
//获取得到对应的省份编码
var province = provinces.find(function(obj) {
return obj.adcode.startsWith(provinceCode);
})
//获取身份证前4位 市编码前两位
//省没有找到
if (province == undefined) {
return false;
}
// 获取市的编码
var cityCode = ID.substr(0, 4);
var city = province.districts;
var ct = city.find(function(obj) {
return obj.adcode.startsWith(cityCode);
})
if (ct == undefined) {
return false;
}
//获取身份证前6位
var countyCode = ID.substr(0, 6);
var countys = ct.districts
var county = countys.find(function(obj) {
return obj.adcode == countyCode;
})
if (county == undefined) {
return false;
}
//验证最后一位
var nums = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
//分别相乘
var res = nums.reduce(function(res, obj, index) {
res += ID.charAt(index) * obj;
return res;
},0)
//拿到余数
var mod = res % 11;
var endNums = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2];
if (ID.substring(17) != endNums[mod]) {
return false;
}
return true;
}
console.log(checkId("410721200109163536"));
</script>
</body>
06-24
2002