封装校验证件号

发布时间 2023-07-11 11:42:27作者: 时光独醒

封装正则校验证件号方法

创建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;
      }
    }
  }
}