校验身份证号码

博客主要围绕身份证格式判断展开,核心是判断输入的身份证是否符合正确格式,属于信息技术中数据验证相关内容。

判断输入的身份证是否是正确的格式

 isIDCard(obj) {
        var 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: "澳门",
          91: "国外"
        };
        var iSum = 0;

        //var info = "";
        var strIDno = obj;
        var idCardLength = strIDno.length;
        if (!/^\d{17}(\d|x)$/i.test(strIDno) && !/^\d{15}$/i.test(strIDno))
          return false; //非法身份证号

        if (aCity[parseInt(strIDno.substr(0, 2))] == null)
          return false;// 非法地区

        // 15位身份证转换为18位
        if (idCardLength == 15) {
          var sBirthday = "19" + strIDno.substr(6, 2) + "-" + Number(strIDno.substr(8, 2)) + "-" + Number(strIDno.substr(10, 2));
          var d = new Date(sBirthday.replace(/-/g, "/"))
          var dd = d.getFullYear().toString() + "-" + (d.getMonth() + 1) + "-" + d.getDate();
          if (sBirthday != dd)
            return false; //非法生日
          strIDno = strIDno.substring(0, 6) + "19" + strIDno.substring(6, 15);
          strIDno = strIDno + GetVerifyBit(strIDno);
        }

        // 判断是否大于2078年,小于1900年
        var year = strIDno.substring(6, 10);
        if (year < 1900 || year > 2078)
          return false;//非法生日

        //18位身份证处理

        //在后面的运算中x相当于数字10,所以转换成a
        strIDno = strIDno.replace(/x$/i, "a");

        var sBirthday = strIDno.substr(6, 4) + "-" + Number(strIDno.substr(10, 2)) + "-" + Number(strIDno.substr(12, 2));
        var d = new Date(sBirthday.replace(/-/g, "/"))
        if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate()))
          return false; //非法生日
        // 身份证编码规范验证
        for (var i = 17; i >= 0; i--)
          iSum += (Math.pow(2, i) % 11) * parseInt(strIDno.charAt(17 - i), 11);
        if (iSum % 11 != 1)
          return false;// 非法身份证号

        // 判断是否屏蔽身份证
        var words = new Array();
        words = new Array("11111119111111111", "12121219121212121");

        for (var k = 0; k < words.length; k++) {
          if (strIDno.indexOf(words[k]) != -1) {
            return false;
          }
        }

        return true;

      },
      if(!this.isIDCard(this.Idnumber)){
	console.log('当前身份证错误')
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值