前端验证常见证件号的正则表达式

1.身份证

// 基本验证
/^[1-8][1-7]\d{4}(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dX]$/
// 完善验证
​
// 基本验证
/^[1-8][1-7]\d{4}(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dX]$/

​function validateSecIdCard (value) {
  if (!value) return true
  let iSum = 0
  let sId = value
  let aCity = {
    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: '澳门',
    83: '台湾',
    91: '国外'
  }
  if (!/^[1-8][1-7]\d{4}(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dX]$/i.test(sId)) {
    return false
  }
  sId = sId.replace(/x$/i, 'a')
  // 非法地区
  if (aCity[parseInt(sId.substr(0, 2))] === null) {
    return false
  }
  let sBirthday = sId.substr(6, 4) + '-' + Number(sId.substr(10, 2)) +
    '-' + Number(sId.substr(12, 2))
  let d = new Date(sBirthday.replace(/-/g, '/'))
  // 非法生日
  if (sBirthday !== (d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d
    .getDate())) {
    return false
  }
  for (let i = 17; i >= 0; i--) {
    iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11)
  }
  if (iSum % 11 !== 1) {
    return false
  }
  return true
}

2.港澳台居住证

/*
*18位的:包含三种开头:香港以810000开头,澳门以820000开头,台湾以830000开头,7为以后和身份证的验证规则一样。
*/
/^8[123]0000(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dX]$/

 3.港澳居民来往内地通行证

/*
* 当证件类型=港澳居民来往内地通行证时,证件号的正则规则兼容以下三种类型:
* 1)H/M + 10位阿拉伯数字
* 2)C/M + 8位阿拉伯数字
* 3)C + 1位英文字母 + 7位阿拉伯数字。第二位英文字母不能是I或O
*/
/^[HM][0-9]{10}$|^[CM][0-9]{8}$|^[C][A-HJ-NP-Z][0-9]{7}$/

 4.台湾居民来往大陆通行证

/*
新版的台胞证8位数字
*/
/^\d{8}$/

5.军官证

/*
* 规则: 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"
* 样本: 军字第2001988号, 士字第P011816X号
*/
/^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$/

 6.香港居民身份证

/*
* 1)8位的:1位英文字母+6位阿拉伯数字+(1位阿拉伯数字或A)
* 2)9位的:2位英文字母+6位阿拉伯数字+(1位阿拉伯数字或A)
*/
/^([A-Za-z]{1,2})\d{6}\([\dA]\)$/

 7.澳门居民身份

/*
*  8位:1/5/7+6位阿拉伯数字+(1位阿拉伯数字)
*/
/^[1|5|7]\d{6}\([\d]\)$/

8.台湾居民身份证

/*
*  10位:1位大写字母 + 9位阿拉伯数字
*/
/^[A-Z]\d{9}$/

 9.外国人永久居留身份证

/*
* 15位:前三位是大写英文字母
*/
/^[A-Z]{3}[0-9]{12}$/

10.户口本证件号

/*
* 规则: 15位数字, 18位数字, 17位数字 + X
*/
/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值