JS(JavaScript)验证身份证号码格式的合法性

本文分享了一段JavaScript代码,用于前端工程师验证18位身份证号码的合法性。代码仅适用于18位身份证,并根据其特定规则进行验证,便于学习和交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、JS(JavaScript)验证身份证号码格式的合法性,前端工程师会用到JavaScript验证身份证号码是否合法,这里分享一段本人多年以前多写的JavaScript验证输入身份证号码合法性的代码,因为本人前后端都有涉及,这是本人之前上传到百度文库的,写得不太完美,望多指教!只验证18位身份证号码,18位身份证号码有相应的规则,代码片段里有详细的说明,方便学习交流。

二、源代码

    /**检验身份证号码是否合法
		15位身份证号码组成:
        ddddddyymmddxxs共15位,其中:
        dddddd为6位的地方代码,根据这6位可以获得该身份证号所在地。
        yy为2位的年份代码,是身份证持有人的出身年份。
        mm为2位的月份代码,是身份证持有人的出身月份。
        dd为2位的日期代码,是身份证持有人的出身日。
                      这6位在一起组成了身份证持有人的出生日期。
        xx为2位的顺序码,这个是随机数。
        s为1位的性别代码,奇数代表男性,偶数代表女性。		
		18位身份证号码组成:ddddddyyyymmddxxsp共18位,其中:
                      其他部分都和15位的相同。年份代码由原来的2位升级到4位。最后一位为校验位。
                      校验规则是:
           (1)十七位数字本体码加权求和公式
           S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
           Ai:表示第i位置上的身份证号码数字值
           Wi:表示第i位置上的加权因子
           Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
           (2)计算模
           Y = mod(S, 11)
           (3)通过模得到对应的校验码
           Y: 0 1 2 3 4 5 6 7 8 9 10
           校验码: 1 0 X 9 8 7 6 5 4 3 2
           也就是说,如果得到余数为1则最后的校验位p应该为对应的0.如果校验位不是,
           则该身份证号码不正确。
		**/
		function isValidIdCard(idCard){
		  var ret=false;
     	   var w=[7 ,9,10,5,8,4,2, 1,6, 3, 7, 9 ,10, 5 ,8 ,4, 2];     	   
		   if(idCard.length == 18){
		     //身份证号码长度必须为18,只要校验位正确就算合法
		      var crc=idCard.substring(17);
		      var a =new Array();
		      var sum=0;
		      for(var i=0;i<17;i++){
		        a.push(idCard.substring(i,i+1));
		        sum+=parseInt(a[i],10)*parseInt(w[i],10);
		        //alert(a[i]);
		      }
		      sum%=11;
		      var res="-1";
		      switch (sum){
		      case 0:{
		        res="1";
		        break;
		      }
		      case 1:{
		                   res="0";
		                   break;
		                   }
		      case 2:{
		                   res="X";
		                   break;
		                   }
		      case 3:{
		                   res="9";
		                   break;
		                   }
		      case 4:{
		                   res="8";
		                   break;
		                   }
		      case 5:{
		                   res="7";
		                   break;
		                   }
		      case 6:{
		                   res="6";
		                   break;
		                   } 
		       case 7:{
		                   res="5";
		                   break;
		                   } 
		       case 8:{
		                   res="4";
		                   break;
		                   } 
		        case 9:{
		                   res="3";
		                   break;
		                   }
		         case 10:{
		                   res="2";
		                   break;
		                   }
		      }
		      if(crc.toLowerCase()==res.toLowerCase()){
		         ret=true; 
		      }
		      //ret=true; 
		   }
		   /*
		   else if(idCard.length == 15){
		        //15位的身份证号,只验证是否全为数字
		        var pattern = /\d/;
		        ret=pattern.test(idCard); 
		   }*/
		  return ret;	   
		}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值