js中身份证号验证

checksfzh (shenfzh) {
    var 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: '国外 '
    };

/* 15位身份证号转18位身份证号 */
  var a18 = shenfzh
  if (shenfzh.length === 15) {
     var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
     var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
     var cardTemp = 0
     a18 = ''
     a18 = shenfzh.substr(0, 6) + '19' + shenfzh.substr(6, shenfzh.length - 6)
     for (var k = 0; k < 17; k++) {
       cardTemp += a18.substr(k, 1) * arrInt[k]
     }
     a18 += arrCh[cardTemp % 11]
   }
   shenfzh = a18
    var isIDCard = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/i;
    if (shenfzh === '' || shenfzh === null) {
      return false;
    }
    shenfzh = shenfzh.replace(/(^\s*)|(\s*$)/g, ''); // 去除首尾空格
    /** 身份证号验证 */
    if (!isIDCard.test(shenfzh)) {
      return false;
    } else if (!city[shenfzh.substr(0, 2)]) {
      return false;
    } else {
      if (shenfzh.length === 18) { // 18位身份证需要验证最后一位校验位
        shenfzh = shenfzh.split('');
        // 加权因子
        var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
        // 校验位
        var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
        var sum = 0;
        var ai = 0;
        var wi = 0;
        for (var i = 0; i < 17; i++) {
          ai = shenfzh[i];
          wi = factor[i];
          sum += ai * wi;
        }
        var last = parity[sum % 11];
        if (last === 'X') { // 最后一位为字母X时
          if (last !== shenfzh[17].toUpperCase()) { // toUpperCase用于把字符串转换为大写
            return false;
          } else {
            return true;
          }
        } else {  // 最后一位为数字时
          if (parseInt(last) !== parseInt(shenfzh[17])) {
            return false;
          } else {
            return true;
          }
        }
      }
    }
  }

 

说明:传入身份证号,返回true或者false

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值