身份證驗證判斷、身份證正則表達式、15位、18位身份證驗證

這次項目對身份證的輸入驗證要求比較高,
因此在網上多方搜查資料,得到了超嚴謹的身份證驗證正則(外加一點點判斷),
現進行記錄,以便後續使用,如下:

//HTML部分
<input type='text' id='idCard' />

//函數調用進行判斷
var returnParam = IdentityIDCard ($("#idCard").val());
if(returnParam.isPass){
    alert('身份證格式無誤!');
}else{
    alert(returnParam.errorMess);
}

/**
 * 身份證是否準確判斷函數
 * @code 身份證號
 * 注意:以下函數的定義我採用的vueJS寫法,若使用JQuery、JS請進行變換
 */
IdentityIDCard : function (code) { 
       //身份證號前兩位代表區域
       var city={
                 11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",
                 21:"遼寧",22:"吉林", 23:"黑龍江 ",
                 31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",
                 41:"河南",42:"湖北 ",43:"湖南",44:"廣東",45:"廣西",46:"海南",
                 50:"重慶",51:"四川",52:"貴州",53:"雲南",54:"西藏 ",
                 61:"陝西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",
                 71:"臺灣",
                 81:"香港",82:"澳門",
                 91:"國外 "
       };
       //身份證格式正則表達式
       var idCardReg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i;
       var errorMess = "";//錯誤提示信息
       var isPass= true;//身份證驗證是否通過(true通過、false未通過)

    //如果身份證不滿足格式正則表達式
       if(!code || !idCardReg.test(code)){
           errorMess = "您輸入的身份證號格式有誤!";
           isPass= false;
       }

      //區域數組中不包含需驗證的身份證前兩位
      else if(!city[code.substr(0,2)]){
           errorMess = "您輸入的身份證地址編碼有誤!";
           isPass= false;
       }
       else{
           //18位身份證需要驗證最後一位校驗位
           if(code.length == 18){
               code = code.split('');
               //∑(ai×Wi)(mod 11)
               //加權因子
               var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
               //校驗位
               var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
               var sum = 0;
               var ai = 0;
               var wi = 0;
               for (var i = 0; i < 17; i++)
               {
                   ai = code[i];
                   wi = factor[i];
                   sum += ai * wi;
               }
               var last = parity[sum % 11];
               if(parity[sum % 11] != code[17]){
                   errorMess = "18身份證最後一位校驗位驗證有誤!";
                   isPass = false;
               }
           }
       }
       var returnParam = {
           'errorMess ' : errorMess ,
           'isPass ' : isPass 
       }
       return returnParam ;
   }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章