封装校验证件号
封装正则校验证件号方法
创建commRepExp.js
/** * 校验身份证,代校验位 此处仅仅是大陆18位的身份证校验 * @param idCard 校验的数据 * @returns Boolean 返回布尔值 */ const isVerifyIdCard = (idCard) => { //18位身份证号码的正则表达式 var regIdCard = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/; //如果通过该验证,说明身份证格式正确,但准确性还需计算 if (regIdCard.test(idCard)) { if (idCard.length == 18) { var idCardWi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); //将前17位加权因子保存在数组里 var idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2); //这是除以11后,可能产生的11位余数、验证码,也保存成数组 var idCardWiSum = 0; //用来保存前17位各自乖以加权因子后的总和 for (var i = 0; i < 17; i++) { idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i]; } var idCardMod = idCardWiSum % 11; //计算出校验码所在数组的位置 var idCardLast = idCard.substring(17); //得到最后一位身份证号码 //如果等于2,则说明校验码是10,身份证号码最后一位应该是X if (idCardMod == 2) { if (idCardLast == "X" || idCardLast == "x") { // alert("恭喜通过验证啦!"); return true; } else { // alert("身份证号码错误!"); return false; } } else { //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码 if (idCardLast == idCardY[idCardMod]) { // alert("恭喜通过验证啦!"); return true; } else { // alert("身份证号码错误!"); return false; } } } } else { // alert("身份证格式不正确!"); return false; } } /** * 增加香港身份证的校验 * @param idcardno 校验的数据 * @returns Boolean 返回布尔值 */ const isVerifyHKIdCard = (idcardno) => { //先去掉括号 var idcardno2 = idcardno.replace("(", "").replace(")", "").replace("/", "").replace("/", ""); var reg = /^[a-zA-Z]{1,2}[0-9]{6}[\(][\da-zA-Z][\)]$/; return reg.test(idcardno2); } /** * 增加澳门身份证的校验 * @param idcardno 校验的数据 * @returns Boolean 返回布尔值 */ const isVerifyAMIdCard = (idcardno) => { //增加澳门身份证的校验 var idcardno2 = idcardno.replace("(", "").replace(")", ""); var reg = /^[a-zA-Z0-9]{7}[\(][\da-zA-Z][\)]$/ || /^[a-z,A-Z,0-9]{1}[\/][a-z,A-Z,0-9]{6}[\/][\d,a-z,A-Z]$/; if (!reg.test(idcardno2)) { idcardno2 = idcardno2.replace("/", "").replace("/", ""); reg = /^(\d{7}[A-Za-z0-9])$/; return reg.test(idcardno2); } else { return true; } } /** * 增加台湾身份证的校验 * @param idcardno 校验的数据 * @returns Boolean 返回布尔值 */ const isVerifyTWIdCard = idcardno => { var reg = /^([A-Z][0-9]{9})$/; return reg.test(idcardno); } /** * 护照校验 * @param psport 校验的数据 * @returns Boolean 返回布尔值 */ const isVerifyPassport = psport => { var reg = /^[0-9A-Z]{8,9}$/i; return reg.test(psport); } /** * 营业执照 * @param psport 校验的数据 * @returns Boolean 返回布尔值 */ const isVerifyBusinessLicense = psport => { var reg = /^\w(\w|\-){6,29}$/; return reg.test(psport); } /** * uni吐司提示 * @param title 内容 * @param duration 吐司时长 * @param type 是否有图标 * @param mask 是否有蒙版 * @returns fun */ const uniShowToast = (title, duration = 3000, type = 'none', mask = false, callback) => { mask = mask ? mask : false; //吐司时是否可触发页面 uni.showToast({ icon: type, title: title, duration: duration, mask: mask, success: callback }) } /** * 校验证件号 * @param cerNo 证件号 * @param cerType 证件类型 * @returns Boolean */ export const verifyIdNumber = (cerNo, cerType) => { // 校验证件号码是否正确 var _this = this; var str = false; if (cerType == 1) { //居民身份证 if (!isVerifyIdCard(cerNo)) { uniShowToast('身份证号格式错误'); str = true; } } else if (cerType == 4) { // 香港身份证 if (!isVerifyHKIdCard(cerNo)) { uniShowToast('身份证号格式错误'); str = true; } } else if (cerType == 5) { // 澳门身份证 if (!isVerifyAMIdCard(cerNo)) { uniShowToast('身份证号格式错误'); str = true; } } else if (cerType == 6) { // 台湾身份证 if (!isVerifyTWIdCard(cerNo)) { uniShowToast('身份证号格式错误'); str = true; } } else if (cerType == 2) { // 护照 if (!isVerifyPassport(cerNo)) { uniShowToast('护照号格式错误'); str = true; } } else if (cerType == 3) { // 营业执照 if (!isVerifyBusinessLicense(cerNo)) { uniShowToast('营业执照号格式错误'); str = true; } } return str; } export default { isVerifyIdCard, isVerifyHKIdCard, isVerifyAMIdCard, isVerifyTWIdCard, isVerifyPassport, isVerifyBusinessLicense, }
使用
import {verifyIdNumber} from '@/utils/commRepExp'; export default { methods: { init(){ if (verifyIdNumber(regInfo.cerNo, 1)) { return true; } } } }