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: 聯系我


          主站蜘蛛池模板: 象州县| 昭通市| 巴林右旗| 阳信县| 诸暨市| 吉林省| 炉霍县| 黄山市| 旺苍县| 合肥市| 资中县| 格尔木市| 佛山市| 定边县| 策勒县| 达尔| 平泉县| 河东区| 麻阳| 雷波县| 菏泽市| 怀宁县| 尉犁县| 武鸣县| 光山县| 山东| 乌兰县| 理塘县| 阿城市| 柯坪县| 东台市| 鹤壁市| 侯马市| 潢川县| 靖边县| 澳门| 清徐县| 大方县| 永宁县| 乌拉特前旗| 凉山|