我們在做互聯(lián)網(wǎng)網(wǎng)站時,注冊個人資料時,經(jīng)常要用到身份證號,我們需要對身份證進(jìn)驗證,不然別人隨便輸個號碼就通過,讓你感覺這個網(wǎng)站做得很shit。
身份證號是有規(guī)則的。
結(jié)構(gòu)和形式
1.號碼的結(jié)構(gòu)
公民身份號碼是特征組合碼,由十七位數(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.校驗碼
根據(jù)前面十七位數(shù)字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。
計算方法
1、將前面的身份證號碼17位數(shù)分別乘以不同的系數(shù)。從第一位到第十七位的系數(shù)分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、將這17位數(shù)字和系數(shù)相乘的結(jié)果相加。
3、用加出來和除以11,看余數(shù)是多少?
4、余數(shù)只可能有0-1-2-3-4-5-6-7-8-9-10這11個數(shù)字。其分別對應(yīng)的最后一位身份證的號碼為1-0-X -9-8-7-6-5-4-3-2。
5、通過上面得知如果余數(shù)是3,就會在身份證的第18位數(shù)字上出現(xiàn)的是9。如果對應(yīng)的數(shù)字是2,身份證的最后一位號碼就是羅馬數(shù)字x。
例如:某男性的身份證號碼為【53010219200508011x】, 我們看看這個身份證是不是合法的身份證。
首先我們得出前17位的乘積和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的結(jié)果是189/11=17----2,也就是說其余數(shù)是2。最后通過對應(yīng)規(guī)則就可以知道余數(shù)2對應(yīng)的檢驗碼是X。所以,可以判定這是一個正確的身份證號碼。
以上摘自百度百科。

這個是網(wǎng)上找到的相關(guān)資料圖片。
根據(jù)已知的資料,我們可以把這個方法的內(nèi)部實現(xiàn)用js寫出來。前17位驗證比較容易實現(xiàn),我就不多說了,重點講下最后一位的校驗碼。
這里只驗證18位身份證,15位的一代身份證不能使用了。
這里還驗證了日期的合法性,如0230,0431等非法日期,驗證是不會通過的。
我們還可以將這個方法加到j(luò)query validate中,方便驗證使用。
寫個自定義jquery validate校驗方法
來個簡的demo,看看效果如何。
用百度百科上提供的那身份證號53010219200508011X驗證下

驗證能通過,把x換成0試試

校驗不通過,我們寫的驗證方法成功了!不信你用自己的身份證號試試。原來用js校驗身份證號so easy。
以上就是本文的全部內(nèi)容了,希望大家能夠喜歡。
新聞熱點
疑難解答