今天遇到了一个需要验证身份证号的正确性的问题,依据判断规则。自己写了下。希望大家多多补充
规则: 身份证号码校验:
-
首先校验长度:15位和18位是可通过校验的
-
然后校验编码逻辑,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 我的身份证号码通过校验 复制代码
身份证号码提取有效信息:
-
性别:截取身份证号码15-17位,如果是奇数,则为男性;如果是偶数,则为女性。以上面的例子来说明,15-17位是081,是奇数,判断为男性
-
出生日期:截取身份证号码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;
}
}
复制代码