J2EE社區

          茍有恒,何必三更起五更眠;
          最無益,只怕一日曝十日寒.
          posts - 241, comments - 318, trackbacks - 0, articles - 16

          身份證驗證

          Posted on 2010-08-30 17:07 xcp 閱讀(342) 評論(0)  編輯  收藏 所屬分類: Javascript

          一。常用的身份證驗證

          <script> 
              
          function isIdCardNo(num){
                  num 
          = num.toUpperCase();  
                  
          //身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最后一位是校驗位,可能為數字或字符X。   
                  if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))){ 
                       alert('輸入的身份證號長度不對,或者號碼不符合規定!\n15位號碼應全為數字,18位號碼末位可以為數字或X。'); 
                       
          return false
                  } 
                  
          //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 
                  //下面分別分析出生日期和校驗位 
                  var len, re; 
                  len 
          = num.length; 
                  
          if (len == 15){
                      re 
          = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/); 
                      
          var arrSplit = num.match(re); 
                      
          //檢查生日日期是否正確 
                      var dtmBirth = new Date('19+ arrSplit[2+ '/+ arrSplit[3+ '/+ arrSplit[4]); 
                      
          var bGoodDay; 
                      bGoodDay 
          = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1== Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); 
                      
          if (!bGoodDay){ 
                            alert('輸入的身份證號里出生日期不對!');   
                             
          return false
                      }
          else
                          
          var userBirthDay = String(G('userBirthDay').value);
                          String.prototype.replaceAll  
          = function(s1,s2){return this.replace(new RegExp(s1,"gm"),s2);}  
                          userBirthDay 
          = userBirthDay.replaceAll("-","/");
                          
          var birthDay = new Date(userBirthDay);
                          alert(birthDay);
                          
                          
          //將15位身份證轉成18位 
                          //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 
                            var arrInt = new Array(7910584216379105842); 
                             
          var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
                             
          var nTemp = 0, i;   
                              num 
          = num.substr(06+ '19+ num.substr(6, num.length - 6); 
                            
          for(i = 0; i < 17; i ++){ 
                              nTemp 
          += num.substr(i, 1* arrInt[i]; 
                             } 
                             num 
          += arrCh[nTemp % 11];   
                          
          return num;   
                      }   
                  }
          else if(len == 18) { 
                      re 
          = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/); 
                      
          var arrSplit = num.match(re); 

                      
          //檢查生日日期是否正確 
                      var dtmBirth = new Date(arrSplit[2+ "/" + arrSplit[3+ "/" + arrSplit[4]); 
                      
          var bGoodDay; 
                      bGoodDay 
          = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1== Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4])); 
                      
          if (!bGoodDay){ 
                          alert(dtmBirth.getYear()); 
                          alert(arrSplit[
          2]); 
                          alert('輸入的身份證號里出生日期不對!'); 
                          
          return false
                      }
          else
                          
          //檢驗18位身份證的校驗碼是否正確。 
                          //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 
                          var valnum; 
                          
          var arrInt = new Array(7910584216379105842); 
                          
          var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); 
                          
          var nTemp = 0, i; 
                          
          for(i = 0; i < 17; i ++){ 
                              nTemp 
          += num.substr(i, 1* arrInt[i]; 
                          } 
                          valnum 
          = arrCh[nTemp % 11]; 
                          
          if (valnum != num.substr(171)) { 
                              alert('18位身份證的校驗碼不正確!應該為:' 
          + valnum); 
                              
          return false
                          } 
                          
          return num; 
                      } 
                  } 
                  
          return false
              }  
          </script> 



          名稱: ?4C.ESL | .↗Evon
          口號: 遇到新問題?先要尋找一個方案乄而不是創造一個方案こ
          mail: 聯系我


          主站蜘蛛池模板: 白玉县| 五家渠市| 枝江市| 错那县| 静安区| 八宿县| 宁乡县| 长兴县| 苗栗市| 安宁市| 琼中| 利辛县| 托克托县| 萨迦县| 江都市| 澎湖县| 乡宁县| 赤城县| 加查县| 衡阳市| 五台县| 图木舒克市| 吉安县| 平遥县| 七台河市| 通州区| 惠安县| 尚义县| 涪陵区| 嘉祥县| 井冈山市| 鹤岗市| 新安县| 洪泽县| 新密市| 庆阳市| 锡林郭勒盟| 都匀市| 定西市| 吉木乃县| 瑞昌市|