JS验证18位身份证号的正确性

今天遇到了一个需要验证身份证号的正确性的问题,依据判断规则。自己写了下。希望大家多多补充

规则: 身份证号码校验:

  1. 首先校验长度:15位和18位是可通过校验的

  2. 然后校验编码逻辑,15位身份证号无需校验,校验18位身份证号步骤如下: 1)将身份证号前17位分别乘以下列系数:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 2)将步骤1)中的结果相加 3)将步骤2)中的结果除以11,得到余数 4)余数0,1,2,3,4,5,6,7,8,9,10分别对应身份证号最后一位1,0,X,9,8,7,6,5,4,3,2

      例子:以我的身份证号为例,230106199003190813,按照步骤计算过程如下:
                  1)2*7=14,3*9=27,1*5=5,6*4=24,1*2=2,9*1=9,9*6=54,3*9=27,1*10=10,9*5=45,8*4=32,1*2=2
                  2)14+27+5+24+2+9+54+27+10+45+32+2  =  251
                  3)251  mod  11  =  9
                  4)余数9对应身份证号最后一位是3
                  我的身份证号码通过校验
    复制代码

身份证号码提取有效信息:

  1. 性别:截取身份证号码15-17位,如果是奇数,则为男性;如果是偶数,则为女性。以上面的例子来说明,15-17位是081,是奇数,判断为男性

  2. 出生日期:截取身份证号码7-10位,是出生年 截取身份证号码11-12位,是出生月 截取身份证号码13-14位,是出生日 以上面的例子来说明:7-10位是1990,是我出生的年。月和日同理,不再赘述

首先取到身份证号的值:我这里用idcard;

var pattern = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/;

	if (!pattern.test(idcard) || idcard == "") {
		alert("请输入正确的身份证号");
		return false;
	}else{
		var such = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
		var sum = 0;
		for(var i = 0;i <idcard.length-1;i++){
			for(var j = 0;j<such.length;j++){
				var product = idcard[i]*such[j];
				sum += product;
			}
			
		}
		var result = sum % 11;
		var example = ['1','0','X','9','8','7','6','5','4','3','2'];
		if(idcard[17] == example[result]){
			alert("正确");
		}else{
			alert("错误");
			return false;
		}
		
		
	}
复制代码

转载于:https://juejin.im/post/5bda75c36fb9a022262a6d4e

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值