身份證號碼的結(jié)構(gòu):
1,號碼組成:
由十七位數(shù)字本體碼和一位校驗碼組成。
從左到右:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼,一位數(shù)字校驗碼。
2,地址碼:
表示編碼對象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼,按GB/T2260的規(guī)定執(zhí)行。
3,出生日期碼:
表示編碼對象出生的年、月、日,按GB/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。
4,順序碼:
表示在同一地址碼所標(biāo)識的區(qū)域范圍內(nèi),對同年、同月、同日出生的人編定的順序號,順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。
5,校驗碼:
(1)十七位數(shù)字本體碼加權(quán)求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 , 先對前17位數(shù)字的權(quán)求和
Ai:表示第i位置上的身份證號碼數(shù)字值
Wi:表示第i位置上的加權(quán)因子
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)計算模
Y = mod(S, 11)
(3)通過模得到對應(yīng)的校驗碼
Y: 0 1 2 3 4 5 6 7 8 9 10
校驗碼: 1 0 X 9 8 7 6 5 4 3 2
也就是說,如果得到余數(shù)為1則最后的校驗位p應(yīng)該為對應(yīng)的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位數(shù)字:所在省份編碼,表示省、自治區(qū)、直轄市、特別行政區(qū)。
(2)第3、4位數(shù)字:所在省級市(縣)編碼,表示市、地區(qū)、自治州、盟、直轄市所轄市轄區(qū)、縣匯總碼、省(自治區(qū))直轄縣級行政區(qū)劃匯總碼。
(3)第5、6位數(shù)字:所在地級縣(市)編碼,表示縣、自治縣、縣級市、旗、自治旗、市轄區(qū)、林區(qū)、特區(qū)。
其他
15位身份證號碼:
第7、8位為出生年份(兩位數(shù),用年份的后兩位表示),
第9、10位為出生月份,
第11、12位代表出生日期,
第13、14位為順序碼,這個是隨機數(shù),
第15位代表性別,奇數(shù)為男,偶數(shù)為女。
18位身份證號碼:
第7、8、9、10位為出生年份(四位數(shù)),
第11、12位為出生月份,
第13、14位代表出生日期,
第15、16位為順序碼,
第17位代表性別,奇數(shù)為男,偶數(shù)為女。
最后一位為校驗位。
簡單版:
JS驗證身份證號:
所以有四種可能性:a.15位數(shù)字 b.18位數(shù)字 c.17位數(shù)字,第十八位是'X' d.17位數(shù)字,第十八位是'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校驗的簡單實例