vue 身份证号校验规则 js

vue 身份证号校验规则

export const isCardId = (rule, code, callback)=> {
  let msg = ''
  const city = {
    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 (!code || code.length === 0) {
    msg = '证件号码不能为空'
  } else if (code.length !== 18) {
    msg = '证件号码长度不为18位'
  } else if (!/(^\d{17}(\d|X|x)$)/.test(code)) {
    msg = '证件号码格式错误'
  } else if (!city[code.substr(0, 2)]) {
    msg = '地址编码错误'
  } else {
    // 18位身份证需要验证最后一位校验位
    let codeArray = code.split('')
    // 加权因子
    let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    // 校验位
    let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
    let sum = 0

    for (let i = 0; i < 17; i++) {
      sum += parseInt(codeArray[i]) * factor[i]
    }

    let last = parity[sum % 11]
    if (last.toString() !== codeArray[17].toUpperCase()) {
      msg = '证件号码校验位错误'
    }
  }

  if (msg) {
    callback(msg)
  } else {
    callback()
  }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值