首先我们先获取身份证的数据校验包;
这里不用你们自己去找了,还不快点个赞,真是的。
回复私信我发给你们哦。这里实在太长了。
直接正文
<body>
身份证号:<input type="text" name="" id="txt" value="" />
<script type="text/javascript" src="js/citys.js"></script>
<script type="text/javascript">
var _txt=document.getElementById("txt");
_txt.onblur=function(){
var val=_txt.value;
var flag=checkID(val);
if(!flag){
alert("身份证号不合法!")
}
}
//18位
// 41072419980815451x
//410724 1998 0815 451x
//41:省编码前2位
//4107:市编码前4位
//410724:县编码
//451:奇数为男,偶数为女
//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个数字。
//获取的是所有省的数组
var districts=citys.districts[0].districts;
// 校验身份证号
function checkID(ID){
//验证身份证长度18位
if(ID.length!=18){
return false;
}
//返回符合条件的省
var province= districts.find(function(obj){
//ID.substr(0,2):41
return obj.adcode.startsWith(ID.substr(0,2))
})
console.log(province);
if(province===undefined){
return false;
}
//返回所在的市
var city=province.districts.find(function(obj){
//ID.substr(0,4):4107
return obj.adcode.startsWith(ID.substr(0,4))
})
console.log(city);
if(city===undefined){
return false;
}
//返回所在的县
var country=city.districts.find(function(obj){
//ID.substr(0,2):410724
return obj.adcode.startsWith(ID.substr(0,6))
})
console.log(country);
if(country===undefined){
return false;
}
//前17位乘以不同的系数并且相加
var arr=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
var res=arr.reduce(function(res,item,index){
//charAt:根据下标返回对应的字符
return res+=ID.charAt(index)*item;
},0)
var mod=res%11; //得到余数
console.log(mod);
var endNums=[1,0,"x",9,8,7,6,5,4,3,2];
console.log(endNums[mod]);
if(endNums[mod]!=ID.substr(17)){
return false;
}
return true;
}
console.log(checkID(''));//偷偷试试你自己的身份证号码吧。
</script>
</body>