身份证校验

const RegexUtils = {   /**    * 中文验证    */   checkCN(text: string): boolean {     if (text) {       let regex = /^[\u4E00-\u9FA5]+$/;       return regex.test(text.trim());     } else {       return false;     }   },
  /**    * 手机号码格式验证    */   checkMobile(mobile: string): boolean {     if (mobile) {       let regex = /^1[3-9]\d{9}$/;       return regex.test(mobile.trim());     } else {       return false;     }   },
  /**    * 邮箱格式验证    */   checkEmail(email: string): boolean {     let result: boolean;     if (email) {       let regex =         /^([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;       result = regex.test(email.trim());     } else {       result = false;     }     return result;   },
  /**    * 字母+数字    */   checkLetterAndNumber(value: string) {     if (value) {       let regex = /^[a-zA-Z0-9]+$/;       return regex.test(value.trim());     } else {       return false;     }   },
  checkBank(value: string) {     if (value) {       let regex = /^[0-9]+$/;       return regex.test(value.trim());     } else {       return false;     }   },
  isLeapYear(year: number): boolean {     if (isNaN(year)) {       // 非数字       return false;     } else {       return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;     }   },
  /**    * 身份证号码格式验证    */   checkIdCard(idCardNum: string): boolean {     let prov = {       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: '国外',     };     if (!prov[parseInt(idCardNum.substr(0, 2))]) {       // 省份检验       return false;     }     let regExp;     let idChars = idCardNum.split('');     switch (idCardNum.length) {       case 15: // 15位身份证号检测         if (this.isLeapYear(parseInt(idCardNum.substr(6, 2)) + 1900)) {           // 闰年           regExp =             /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;         } else {           // 平年           regExp =             /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;         }         return regExp.test(idCardNum);       case 18: // 18位身份号码检测         if (this.isLeapYear(parseInt(idCardNum.substr(6, 4)))) {           // 闰年           regExp =             /^[1-9][0-9]{5}[1-9][0-9]{3}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;         } else {           // 平年           regExp =             /^[1-9][0-9]{5}[1-9][0-9]{3}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;         }         if (regExp.test(idCardNum)) {           // 基本校验           let modulus,             checkCodeList = '10X98765432';           let sum, code;           sum =             (parseInt(idChars[0]) + parseInt(idChars[10])) * 7 +             (parseInt(idChars[1]) + parseInt(idChars[11])) * 9 +             (parseInt(idChars[2]) + parseInt(idChars[12])) * 10 +             (parseInt(idChars[3]) + parseInt(idChars[13])) * 5 +             (parseInt(idChars[4]) + parseInt(idChars[14])) * 8 +             (parseInt(idChars[5]) + parseInt(idChars[15])) * 4 +             (parseInt(idChars[6]) + parseInt(idChars[16])) * 2 +             parseInt(idChars[7]) +             parseInt(idChars[8]) * 6 +             parseInt(idChars[9]) * 3; // 计算校验位           modulus = sum % 11;           code = checkCodeList.substr(modulus, 1); // 找到校验位           return code == idChars[17];         } else {           return false;         }       default:         return false;     }   },
  /**    * 金额格式验证:不能为负数,保留两位小数    */   checkAmount(amount: string): boolean {     if (amount) {       const regex =         /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0)$)|(^[0-9]\.[0-9]([0-9])?$)/;       return regex.test(amount.trim());     } else {       return false;     }   },
  //校验数字加字母   checkNumberAndLetter(str: string): boolean {     const re = /^[0-9a-zA-Z]*$/; //判断字符串是否为数字和字母组合     if (!re.test(str)) {       return false;     } else {       return true;     }   },
  // 一种类型的密码   oneTypePwdRegex:     /(?!^[0-9]{8,20}$)(?!^[a-z]{8,20}$)(?!^[A-Z]{8,20}$)^[0-9A-Za-z\!\@\#\$\%\^\&\*\(\)\_\-\+\=]{8,20}$/g,   // 两种类型的密码   twoTypePwdRegex:     /(?!^[0-9a-zA-Z]{8,20}$)^[0-9A-Za-z\!\@\#\$\%\^\&\*\(\)\_\-\+\=]{8,20}$/g, };
export default RegexUtils;
上一篇:JavaScript实现倒计时案例


下一篇:02-JS中的数据类型及类型转换