身份证号码js验证

来源:互联网 发布:2x2的矩阵怎么乘法 编辑:程序博客网 时间:2024/06/06 04:03
  1. 让代码结构完整一点显示出来还是很乱

  2. function shenfenzheng(num) {  
  3.     num = num.toUpperCase();  
  4.     //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。  
  5.     if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {  
  6.         return false;  
  7.     }  
  8.     //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。  
  9.     //下面分别分析出生日期和校验位  
  10.     var len, re;  
  11.     len = num.length;  
  12.     if (len == 15) {  
  13.         re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);  
  14.         var arrSplit = num.match(re);  
  15.    
  16.         //检查生日日期是否正确  
  17.         var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);  
  18.         var bGoodDay;  
  19.         bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) &&  
  20.             (dtmBirth.getDate() == Number(arrSplit[4]));  
  21.         if (!bGoodDay) {  
  22.             return false;  
  23.         } else {  
  24.             //将15位身份证转成18位  
  25.             //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。  
  26.             var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
  27.             var arrCh = new Array('1''0''X''9''8''7''6''5''4''3''2');  
  28.             var nTemp = 0,  
  29.                 i;  
  30.             num = num.substr(0, 6) + '19' + num.substr(6, num.length - 6);  
  31.             for (i = 0; i < 17; i++) {  
  32.                 nTemp += num.substr(i, 1) * arrInt[i];  
  33.             }  
  34.             num += arrCh[nTemp % 11];  
  35.             return true;  
  36.         }  
  37.     }  
  38.     if (len == 18) {  
  39.         re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);  
  40.         var arrSplit = num.match(re);  
  41.    
  42.         //检查生日日期是否正确  
  43.         var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);  
  44.         var bGoodDay;  
  45.         bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) &&  
  46.             (dtmBirth.getDate() == Number(arrSplit[4]));  
  47.         if (!bGoodDay) {  
  48.             return false;  
  49.         } else {  
  50.             //检验18位身份证的校验码是否正确。  
  51.             //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。  
  52.             var valnum;  
  53.             var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);  
  54.             var arrCh = new Array('1''0''X''9''8''7''6''5''4''3''2');  
  55.             var nTemp = 0,  
  56.                 i;  
  57.             for (i = 0; i < 17; i++) {  
  58.                 nTemp += num.substr(i, 1) * arrInt[i];  
  59.             }  
  60.             valnum = arrCh[nTemp % 11];  
  61.             if (valnum != num.substr(17, 1)) {  
  62.                 return false;  
  63.             }  
  64.             return true;  
  65.         }  
  66.     }  
  67.     return false;  
  68. }; 
  69. function yanzheng(){
  70.  var sfz=$("#shenfenzheng").val();
  71.  if(shenfenzheng(sfz)){
  72.  alert("验证正确");
  73. }
  74. }
       
       下面是input输入框
       
  1. <div>  
  2.     <input type="text" id="shenfenzheng">  
  3.     <button onclick="yanzheng()">j验证</button>  
  4. </div>  


1 0