证件校验正则

Posted JenK

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了证件校验正则相关的知识,希望对你有一定的参考价值。

身份证校验

function checkIDCard(idcode) {
  // 正则思路
  /*
    第一位不可能是0
    第二位到第六位可以是0-9
    第七位到第十位是年份,所以七八位为19或者20
    十一位和十二位是月份,这两位是01-12之间的数值
    十三位和十四位是日期,是从01-31之间的数值
    十五,十六,十七都是数字0-9
    十八位可能是数字0-9,也可能是X
    */
  var idcard_patter =
        /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X]|[x])$/

  // 判断格式是否正确
  var format = idcard_patter.test(idcode)

  return !!format
}

手机号码校验

function checkPhone(phone) {
  if (!(/^1[3456789]\\d{9}$/.test(phone))) {
    return false
  } else {
    return true
  }
}

校验军官证

function isOfficerCard(card) {
  // 规则: 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"
  // 样本: 军字第2001988号, 士字第P011816X号
  var reg = /^[\\u4E00-\\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$/
  if (reg.test(card) === false) {
    return {
      \'status\': 0,
      \'msg\': \'军官证号不合规\'
    }
  } else {
    return {
      \'status\': 1,
      \'msg\': \'校验通过\'
    }
  }
}

护照

function isPassPortCard(card) {
  // 规则: 14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等
  // 样本: 141234567, G12345678, P1234567
  var reg = /^([a-zA-z]|[0-9]){5,17}$/
  if (reg.test(card) === false) {
    return {
      \'status\': 0,
      \'msg\': \'护照号码不合规\'
    }
  } else {
    return {
      \'status\': 1,
      \'msg\': \'校验通过\'
    }
  }
}

港澳居民来往内地通行证

function isHKCard(card) {
  // 规则: H/M + 10位或6位数字
  // 样本: H1234567890
  var reg = /^([A-Z]\\d{6,10}(\\(\\w{1}\\))?)$/
  if (reg.test(card) === false) {
    return {
      \'status\': 0,
      \'msg\': \'港澳居民来往内地通行证号码不合规\'
    }
  } else {
    return {
      \'status\': 1,
      \'msg\': \'校验通过\'
    }
  }
}

台湾身份证

function checkTWIdCard(idNo) {
  if (idNo == null || idNo == \'\') {
    return {
      \'respCode\': \'9\',
      \'respDesc\': \'空值\'
    }
  }
  if (idNo.length != 10) {
    return {
      \'respCode\': \'1\',
      \'respDesc\': \'國民身分證統一編號長度不正確(10)\'
    }
  }
  var eng = idNo.substring(0, 1)
  var num = idNo.substring(1, 10)
  var sex = idNo.substring(1, 2)
  eng = eng.toUpperCase()
  var regNum = /^[0-9]+.?[0-9]*/ // 判断字符串是否为数字//判断正整数/[1−9]+[0−9]∗]∗/;//判断字符串是否为数字//判断正整数/[1−9]+[0−9]∗]∗/
  var regEng = /^[A-Za-z]+$/
  if (!regNum.test(num)) {
    return {
      \'respCode\': \'1\',
      \'respDesc\': \'國民身分證統一編號不正確\'
    }
  }
  if (sex != 1 && sex != 2) {
    return {
      \'respCode\': \'1\',
      \'respDesc\': \'國民身分證統一編號不正確\'
    }
  }
  if (!regEng.test(eng)) {
    return {
      \'respCode\': \'1\',
      \'respDesc\': \'國民身分證統一編號不正確\'
    }
  }
  // var key=[‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’J’,’K’,’L’,’M’,’N’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’X’,’Y’,’W’,’Z’,’I’,’O’];
  var key = \'ABCDEFGHJKLMNPQRSTUVXYWZIO\'
  var value = [\'10\', \'11\', \'12\', \'13\', \'14\', \'15\', \'16\', \'17\', \'18\', \'19\', \'20\', \'21\', \'22\', \'23\', \'24\', \'25\', \'26\',
    \'27\', \'28\', \'29\', \'30\', \'31\', \'32\', \'33\', \'34\', \'35\'
  ]
  var pos = key.indexOf(eng)
  if (pos == -1) {
    return {
      \'respCode\': \'1\',
      \'respDesc\': \'國民身分證統一編號不正確\'
    }
  }
  var x1 = value[pos].substring(0, 1)
  var x2 = value[pos].substring(1, 2)
  var y = parseInt(x1) + 9 * parseInt(x2) + 8 * parseInt(num.substring(0, 1)) + 7 * parseInt(num.substring(1, 2)) + 6 *
        parseInt(num.substring(2, 3)) + 5 * parseInt(num.substring(3, 4)) + 4 * parseInt(num.substring(4, 5)) + 3 * parseInt(
    num.substring(5, 6)) + 2 * parseInt(num.substring(6, 7)) + parseInt(num.substring(7, 8))
  var checkResult = y % 10
  if ((10 - checkResult) == num.substring(8, 9)) {
    return {
      \'respCode\': \'0\',
      \'respDesc\': \'success\'
    }
  } else {
    if (checkResult == 10 && num.substring(8, 9) == 0) {
      // 若取余之后的结果为0,那么末尾的数为0
      return {
        \'respCode\': \'0\',
        \'respDesc\': \'success\'
      }
    } else {
      return {
        \'respCode\': \'1\',
        \'respDesc\': \'國民身分證統一編號不正確\'
      }
    }
  }
}

台湾居民来往大陆通行证

function isTWCard(card) {
  // 规则: 新版8位或18位数字, 旧版10位数字 + 英文字母
  // 样本: 12345678 或 1234567890B
  var reg = /^\\d{8}|^[a-zA-Z0-9]{10}|^\\d{18}$/
  if (reg.test(card) === false) {
    return {
      \'status\': 0,
      \'msg\': \'台湾居民来往大陆通行证号码不合规\'
    }
  } else {
    return {
      \'status\': 1,
      \'msg\': \'校验通过\'
    }
  }
}

以上是关于证件校验正则的主要内容,如果未能解决你的问题,请参考以下文章

身份证件号的验证与更改

iOS常用证件正则表达式

iOS常用证件正则表达式

比较常用证件正则表达式验证大全

记录下 js各种证件的正则验证

怎么给有效身份证件类型加判断 jQuery