ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

身份证校验

2022-01-14 19:04:28  阅读:139  来源: 互联网

标签:regex return 校验 else idChars let 身份证 parseInt


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;

标签:regex,return,校验,else,idChars,let,身份证,parseInt
来源: https://www.cnblogs.com/wsj1/p/15803077.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有