JavaScript 身份证校验(无生日校验)

首先我们先获取身份证的数据校验包;

这里不用你们自己去找了,还不快点个赞,真是的。

回复私信我发给你们哦。这里实在太长了。

直接正文

<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>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EternityNotBug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值