前端校验身份证,身份证号信息校验规则

 

  1. 第一部分是定义了一个函数 validateIdnumber,该函数接受三个参数:rulevaluecallback,其中value为需要验证的身份证号码。

  2. 接着是对输入的身份证号码进行各种校验:

    • 首先定义了一个正则表达式 format,用于检查身份证号码的格式是否符合规定。
    • 然后提取身份证号码中的年、月、日信息,并将其转换为时间戳。
    • 接着定义了两个数组 c 和 b,分别存储了系数和校验码对照表。
    • 计算身份证号码前17位数字与相应系数的乘积之和 sum
  3. 在校验部分,根据不同情况调用回调函数 callback 并传递相应的错误信息:

    • 如果身份证号码不符合规则,则返回错误提示 '身份证号码不合规'。
    • 如果出生日期不合规(超过当前日期或者日期超过当月天数),则返回错误提示 '出生日期不合规'。
    • 如果身份证校验码不正确,则返回错误提示 '身份证校验码不合规'。
    • 如果身份证号码为空,则返回错误提示 '请填写身份证号'。
    • 如果以上情况都没有问题,则调用 callback 函数而不传递任何参数,表示验证通过。
    const validateIdnumber = (rule, value, callback) => {
      if (value) {
        // 1 "验证通过!", 0 //校验不通过 // id为身份证号码
        // 号码规则校验
        var format =
          /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/
        // 区位码校验
        // 出生年月日校验  前正则限制起始年份为1900;
        const year = value.substr(6, 4) // 身份证年
        const month = value.substr(10, 2) // 身份证月
        const date = value.substr(12, 2) // 身份证日
        const time = Date.parse(month + '-' + date + '-' + year) // 身份证日期时间戳date
        const nowTime = Date.parse(new Date()) // 当前时间戳
        const dates = new Date(year, month, 0).getDate() // 身份证当月天数
        // 校验码判断
        var c = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] // 系数
        var b = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] // 校验码对照表
        var idArray = value.split('')
        var sum = 0
        for (var k = 0; k < 17; k++) {
          sum += parseInt(idArray[k]) * parseInt(c[k])
        }
        if (!format.test(value)) {
          // 号码规则校验
          callback(new Error('身份证号码不合规'))
        } else if (time > nowTime || date > dates) {
          // 出生年月日校验  前正则限制起始年份为1900;
          callback(new Error('出生日期不合规'))
        } else if (idArray[17].toUpperCase() !== b[sum % 11].toUpperCase()) {
          // 校验码判断
          callback(new Error('身份证校验码不合规'))
        } else {
          callback()
        }
      } else {
        callback(new Error('请填写身份证号'))
      }
    }

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值