首页 > 其他分享 >封装校验证件号

封装校验证件号

时间:2023-07-11 11:45:40浏览次数:35  
标签:return 校验 param 身份证 证件 var 封装 reg

封装正则校验证件号方法

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

 

标签:return,校验,param,身份证,证件,var,封装,reg
From: https://www.cnblogs.com/czhowe/p/17544213.html

相关文章

  • 4.10 x64dbg 反汇编功能的封装
    LyScript插件提供的反汇编系列函数虽然能够实现基本的反汇编功能,但在实际使用中,可能会遇到一些更为复杂的需求,此时就需要根据自身需要进行二次开发,以实现更加高级的功能。本章将继续深入探索反汇编功能,并将介绍如何实现反汇编代码的检索、获取上下一条代码等功能。这些功能对于分......
  • vue3封装echarts组件数据更新不同步问题
    vue3封装echarts组件数据更新不同步问题背景:​ 记录一下项目中遇到的bug,在vue3+echarts环境下,为了方便使用,我将echarts封装成组件使用,使用的时候只需要把对应的值传入给chart组件就行,但是在传入真实数据的时候遇到了问题,就是传入value值与图表组件显示的数值不一致。(如图)......
  • 封装、抽象、继承、多态
    封装1、封装的定义封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。在java中,private、public等关键字就是访问权限控制语法。private关键字修饰的属性只能类本身访问,可以保护其不被类之外的代码直接访问。......
  • 小程序函数全集封装
    /***Createdbyzrs*/importVuefrom'vue'/***json拼接为字符串*@paramjson*@returns{string}*/exportfunctionqs(json){letstr=''for(letkeyinjson){if(json.hasOwnProperty(key)){str+=key+'......
  • 如何实现Java中使用注解校验参数的具体操作步骤
    Java中使用注解校验参数简介在Java开发中,我们经常需要对方法的参数进行校验,以确保传入的参数符合我们的要求。而注解是一种常用的方式来实现参数校验。本文将介绍如何在Java中使用注解来校验参数,并给出一些示例代码帮助理解。整体流程下面是使用注解校验参数的整体流程,我们将通......
  • 微信模板消息推送封装方法
    /***@explain*发送消息通知*@returnarray|mixed*@remark*获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token*access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s.7200s后access......
  • 构造模式+责任链模式实现链式调用(可以用于参数校验等)
    参考:https://zhuanlan.zhihu.com/p/553917078?utm_id=0一、责任链模式责任链模式(ChainofResponsibilityPattern)是将链中每一个节点看作是一个对象,每个节点处理的请求均不同,且内部自动维护一个下一节点对象。当一个请求从链式的首端发出时,会沿着链的路径依次传递给每一个节点......
  • ASEMI代理海矽美SFP6002, 快恢复二极管SFP6002封装
    编辑-ZSFP6002参数描述:型号:SFP6002封装:TO-247-AB最大反向重复峰值电压VRRM:200V平均整流正向电流IF:60A反向恢复时间TRR:≤30nS正向峰值浪涌电流IFSM:450×2A工作接点温度TJ:-40~150℃储存温度TSTG:-40~150℃典型热阻RθJC:0.5℃/WVB:200VIR:0.02mAVF:0.9V  SFP6002特征:超......
  • 第九篇 - SpringBoot统一结果封装Json数据
    前面几节学习了SpringBoot和Vue的结合,以及Vue跳转到另一个Vue页面。这节学习SpringBootcontroller返回Json数据格式封装。参考链接:https://zhuanlan.zhihu.com/p/347233348第一步:在entity文件夹下新建一个ResultVo类。 ResultVo.javapackagecom.example.demo.entity;p......
  • JavaScript校验地图经纬度是否符合规范
    functionverifylonglat(longitude,latitude){varlongreg=/^(\-|\+)?(((\d|[1-9]\d|1[0-7]\d|0{1,3})\.\d{0,6})|(\d|[1-9]\d|1[0-7]\d|0{1,3})|180\.0{0,6}|180)$/;if(!longreg.test(longitude)){returnnewError('经度,整数部分为0-180小数部分为......