身份证号码的验证

身份证号码的结构:

1,号码组成:
由十七位数字本体码和一位校验码组成。
从左到右:六位数字地址码,八位数字出生日期码,三位数字顺序码,一位数字校验码。
2,地址码:
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3,出生日期码:
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4,顺序码:
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
5,校验码:
(1)十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 , 先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模

Y = mod(S, 11)

(3)通过模得到对应的校验码

Y: 0 1 2 3 4 5 6 7 8 9 10
校验码: 1 0 X 9 8 7 6 5 4 3 2
也就是说,如果得到余数为1则最后的校验位p应该为对应的0。

15位的号码:
a a b b c c y y m m d d x x s
18位的号码:
a a b b c c y y y y m m d d x x s p

地址码

(1)第1、2位数字:所在省份编码,表示省、自治区、直辖市、特别行政区。
(2)第3、4位数字:所在省级市(县)编码,表示市、地区、自治州、盟、直辖市所辖市辖区、县汇总码、省(自治区)直辖县级行政区划汇总码。
(3)第5、6位数字:所在地级县(市)编码,表示县、自治县、县级市、旗、自治旗、市辖区、林区、特区。

其他

15位身份证号码:

第7、8位为出生年份(两位数,用年份的后两位表示),
第9、10位为出生月份,
第11、12位代表出生日期,
第13、14位为顺序码,这个是随机数,
第15位代表性别,奇数为男,偶数为女。

18位身份证号码:

第7、8、9、10位为出生年份(四位数),
第11、12位为出生月份,
第13、14位代表出生日期,
第15、16位为顺序码,
第17位代表性别,奇数为男,偶数为女。
最后一位为校验位。

简单版:
JS验证身份证号:
所以有四种可能性:a.15位数字 b.18位数字 c.17位数字,第十八位是'X' d.17位数字,第十八位是'x'

var regIdNo = /(\d{15}$)|(^\d{18}$)|(\d{17}(\d|X|x)$)/;
if(!regIdNo.test(idNo)){
alert('身份证号填写有误');
return false;
}

原文链接:

js验证真实姓名与身份证号,手机号的简单实例:
(https://www.jb51.net/article/88775.htm)

15位和18位身份证JS校验的简单实例

(https://www.jb51.net/article/88771.htm)

你可能感兴趣的:(身份证号码的验证)