util-2.正則表達式校驗(validExpUtil)


/**
 * ========================正則表達式校驗========================
 */
var validExpUtil = {
  // 身份證驗證
  isCid:idCardNoUtil.checkIdCardNo,
  // 港澳臺胞驗證
  isQid:/^(H|h|M|m)?\d{10}$/,
  // 中國護照驗證
  isHid:/^(G|E)\d{8}$/,
  // 軍官證士兵證驗證
  isJid:/(^[\u4e00-\u9fa5]{3,5}\d{6,12})$/,
  // 混合姓名驗證
  isName:/^(([A-z]|[\u4E00-\u9FA5\uF900-\uFA2D]){1,10}[.|·]?){1,5}(([A-z]{2,10})|([\u4E00-\u9FA5\uF900-\uFA2D]{1,10}))$/,
  // 中文姓名驗證
  isNameZh:/^([\u4E00-\u9FA5\uF900-\uFA2D]{1,10}[.|·]?){1,5}([\u4E00-\u9FA5\uF900-\uFA2D]){1,10}$/,
  // 英文姓名驗證
  isNameEe:/^([A-z]{1,20}[.|·]?){1,5}([A-z]){2,20}$/,
  // Email驗證
  isEmail:/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/,
  // mobile驗證
  isMobile:/^0*(86)*(13|14|15|16|17|18|19)\d{9}$/, //目前只校驗位數,不作1*開頭的校驗
  // 固定電話正則
  isFixtel:/^0\d{2,3}-?\d{7,8}$/,
  // 數字驗證
  isNum:/^[0-9]+$/,  //注意:必須有起始符,否則校驗有問題
  // 字母數字驗證
  isEeN:/(^[a-zA-Z0-9]+)$/,
  // 漢字帶全角符號驗證
  isZhP:/(^[\u0391-\uFFE5]+)$/,
  // 漢字驗證
  isZh:/(^[\u4e00-\u9fa5]+)$/,
  // 中英文
  isZhEn:/^[\u4e00-\u9fa5a-zA-Z]+$/,
  // URL
  isUrl: /(http|https):\/\/([\w.]+\/?)\S*/
};

/**
 * 身份證校驗
 * @type {Object}
 */
var idCardNoUtil = {
    /*省,直轄市代碼表:前2位*/
  "provinceAndCitys": {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:"國外"},

  /*每位加權因子*/
  "powers": ["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"],

  /*第18位校檢碼:第18位*/
  "parityBit": ["1","0","X","9","8","7","6","5","4","3","2"],

  /*性別:倒數第2位,奇數男,偶數女*/
  "genders": {male:"男",female:"女"},

  /*校驗地址碼:前6位*/
  "checkAddressCode": function(addressCode){
     var check = /^[1-9]\d{5}$/.test(addressCode);
     if(!check) return false;
     if(this.provinceAndCitys[parseInt(addressCode.substring(0,2))]){
       return true;
     }else{
       return false;
     }
  },

  /*校驗日期碼:第7-15位*/
  "checkBirthDayCode": function(birDayCode){
    var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
    if(!check) return false;
    var yyyy = parseInt(birDayCode.substring(0,4),10);
    var mm = parseInt(birDayCode.substring(4,6),10);
    var dd = parseInt(birDayCode.substring(6),10);
    var xdata = new Date(yyyy,mm-1,dd);
    if(xdata > new Date()){
      return false;//生日不能大於當前日期
    }else if ( ( xdata.getFullYear() == yyyy ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == dd ) ){
      return true;
    }else{
      return false;
    }
  },

  /*計算校檢碼*/
  "getParityBit": function(idCardNo){
    var id17 = idCardNo.substring(0,17);
    /*加權 */
    var power = 0;
    for(var i=0;i<17;i++){
     power += parseInt(id17.charAt(i),10) * parseInt(this.powers[i]);
   }
   /*取模*/
   var mod = power % 11;
   return this.parityBit[mod];
  },

  /*驗證校檢碼*/
  "checkParityBit": function(idCardNo){
   var parityBit = idCardNo.charAt(17).toUpperCase();
   if(this.getParityBit(idCardNo) == parityBit){
     return true;
   }else{
     return false;
   }
  },

  /*校驗15位或18位的身份證號碼*/
  "checkIdCardNo": function(idCardNo){
    //15位和18位身份證號碼的基本校驗
    var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
    if(!check) return false;
    //判斷長度爲15位或18位
    if(idCardNo.length==15){
      return this.check15IdCardNo(idCardNo);
      return false;
    }else if(idCardNo.length==18){
      return this.check18IdCardNo(idCardNo);
    }else{
      return false;
    }
  },

  //校驗15位的身份證號碼
  "check15IdCardNo": function(idCardNo){
     //15位身份證號碼的基本校驗
     var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
     if(!check) return false;
     //校驗地址碼
     var addressCode = idCardNo.substring(0,6);
     check = this.checkAddressCode(addressCode);
     if(!check) return false;
     var birDayCode = '19' + idCardNo.substring(6,12);
     //校驗日期碼
     return this.checkBirthDayCode(birDayCode);
   },

  //校驗18位的身份證號碼
  "check18IdCardNo": function(idCardNo){
     //18位身份證號碼的基本格式校驗
     var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
     if(!check) return false;
     //校驗地址碼
     var addressCode = idCardNo.substring(0,6);
     check = this.checkAddressCode(addressCode);
     if(!check) return false;
     //校驗日期碼
     var birDayCode = idCardNo.substring(6,14);
     check = this.checkBirthDayCode(birDayCode);
     if(!check) return false;
     //驗證校檢碼
     return this.checkParityBit(idCardNo);
   },

   //轉換日期格式
   "formateDateCN": function(day){
     var yyyy =day.substring(0,4);
     var mm = day.substring(4,6);
     var dd = day.substring(6);
     return yyyy + '-' + mm +'-' + dd;
   },

    /**
     *   功能: 通過身份證號獲取相關信息
         address : 地域
         gender  : 性別
         birthday : 出生日期
     * @param idCardNo
     * @returns {{birthday: string, address: string, gender: string}}
     */
  "getIdCardInfo": function(idCardNo){
    var idCardInfo = {
       address:"",   //地域
       gender:"",   //性別
       birthday:"" // 出生日期(yyyy-mm-dd)
    };
    if(idCardNo.length==15){
      var aday = '19' + idCardNo.substring(6,12);
      idCardInfo.birthday=this.formateDateCN(aday);
      if(parseInt(idCardNo.charAt(14))%2==0){
        idCardInfo.gender=this.genders.female;
      }else{
        idCardInfo.gender=this.genders.male;
      }
    }else if(idCardNo.length==18){
      var aday = idCardNo.substring(6,14);
      idCardInfo.birthday=this.formateDateCN(aday);
      if(parseInt(idCardNo.charAt(16))%2==0){
        idCardInfo.gender=this.genders.female;
      }else{
        idCardInfo.gender=this.genders.male;
      }
    }
    var adr = idCardNo.substring(0,2);
    idCardInfo.address=this.provinceAndCitys[adr];

    return idCardInfo;
  },

  /*18位轉15位*/
  "getId15": function(idCardNo){
     if(idCardNo.length==15){
        return idCardNo;
     }else if(idCardNo.length==18){
        return idCardNo.substring(0,6) + idCardNo.substring(8,17);
     }else{
        return null;
    }
  },

  /*15位轉18位*/
  "getId18": function(idCardNo){
    if(idCardNo.length==15){
      var id17 = idCardNo.substring(0,6) + '19' + idCardNo.substring(6);
      var parityBit = this.getParityBit(id17);
      return id17 + parityBit;
    }else if(idCardNo.length==18){
      return idCardNo;
    }else{
      return null;
    }
  }
};
/*******身份證校驗  結束*******/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章