panghu123

身份证号验证 正则

 /**
     * @description: 身份证号校验
     * @param {*}num  身份证号的值
     * @return {*}
     */
    checkMobileIDNumber(num) {
      if (!num) {
        return
      }
      num = num.toUpperCase()
      //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
      if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)) {
        return \'(身份证号有误)\'
      }
      //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
      //下面分别分析出生日期和校验位
      let len, re
      len = num.length
      if (len == 15) {
        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/)
        let arrSplit = num.match(re)

        //检查生日日期是否正确
        let dtmBirth = new Date(\'19\' + arrSplit[2] + \'/\' + arrSplit[3] + \'/\' + arrSplit[4])
        let bCorrectDay
        bCorrectDay = dtmBirth.getYear() == Number(arrSplit[2]) && dtmBirth.getMonth() + 1 == Number(arrSplit[3]) && dtmBirth.getDate() == Number(arrSplit[4])
        if (!bCorrectDay) {
          return \'(出生日期有误)\'
        } else {
          //将15位身份证转成18位
          //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
          let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
          let arrCh = new Array(\'1\', \'0\', \'X\', \'9\', \'8\', \'7\', \'6\', \'5\', \'4\', \'3\', \'2\')
          let nTemp = 0,
            i
          num = num.substr(0, 6) + \'19\' + num.substr(6, num.length - 6)
          for (i = 0; i < 17; i++) {
            nTemp += num.substr(i, 1) * arrInt[i]
          }
          num += arrCh[nTemp % 11]
          return \'\'
        }
      }
      if (len == 18) {
        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
        let arrSplit = num.match(re)

        //检查生日日期是否正确
        let dtmBirth = new Date(arrSplit[2] + \'/\' + arrSplit[3] + \'/\' + arrSplit[4])
        let bCorrectDay
        bCorrectDay = dtmBirth.getFullYear() == Number(arrSplit[2]) && dtmBirth.getMonth() + 1 == Number(arrSplit[3]) && dtmBirth.getDate() == Number(arrSplit[4])
        if (!bCorrectDay) {
          return \'(出生日期有误)\'
        } else {
          //检验18位身份证的校验码是否正确。
          //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
          let valnum
          let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
          let arrCh = new Array(\'1\', \'0\', \'X\', \'9\', \'8\', \'7\', \'6\', \'5\', \'4\', \'3\', \'2\')
          let nTemp = 0,
            i
          for (i = 0; i < 17; i++) {
            nTemp += num.substr(i, 1) * arrInt[i]
          }
          valnum = arrCh[nTemp % 11]
          if (valnum != num.substr(17, 1)) {
            return \'(校验码有误)\'
          }
          return \'\'
        }
      }
      return \'\'
    },

js提取身份证号信息 (籍贯、出生日期、性别、年龄)

 /**
     * @description: 身份证号信息提取
     * @param {*} MyIDCard  身份证号码
     * @param {*} label     对应要return出去的是哪个字段  Hometown 、MyBirthday、MySex、MyDate
     * @return {*}
     */    
    IDCardData(MyIDCard, label) {
      console.log(MyIDCard, label)
      if (MyIDCard) {
        if (label == \'Hometown\') {
          //根据身份证号获取籍贯
          let Hometown = {
            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: \'澳门\',
          }
        let  MyHometown = Hometown[parseInt(MyIDCard.substring(0, 2))]
          return MyHometown
        } else if (label == \'MyBirthday\') {
          //根据身份证号获取出生日期
          let MyBirthday = MyIDCard.substring(6, 10) + \'-\' + MyIDCard.substring(10, 12) + \'-\' + MyIDCard.substring(12, 14)
          return MyBirthday
        } else if (label == \'MySex\') {
          //根据身份证号获取性别
          let MySex = \'\'
          if (parseInt(MyIDCard.substr(16, 1)) % 2 == 1) {
            MySex = \'男\'
          } else {
            MySex = \'女\'
          }
          return MySex
        } else if (label == \'MyDate\') {
          //根据身份证号获取年龄
          let MyDate = new Date()
          MyDate = MyDate.getFullYear() - MyIDCard.substring(6, 10) 
          return MyDate
        }

        return \'\'
      } else {
        return \'\'
      }
    },

分类:

技术点:

相关文章:

  • 2021-12-04
  • 2022-12-23
  • 2022-12-23
  • 2022-02-09
  • 2022-12-23
  • 2022-12-23
  • 2021-06-01
猜你喜欢
  • 2021-12-12
  • 2021-09-27
  • 2022-12-23
  • 2022-12-23
  • 2021-07-25
  • 2022-12-23
相关资源
相似解决方案