摘要:如果余數是,身份證的最后一位號碼就是。舉例某男性的身份證號碼是。我們要看看這個身份證是不是合法的身份證。首先我們得出前位的乘積和然后再求余最后通過對應規則就可以知道余數對應的數字是。
18位身份證號碼各位的含義
1-2位省、自治區、直轄市代碼;
3-4位地級市、盟、自治州代碼;
5-6位縣、縣級市、區代碼;
7-14位出生年月日,比如19670401代表1967年4月1日;
15-17位為順序號,其中17位男為單數,女為雙數;
18位為校驗碼,0-9和X,由公式隨機產生;
舉例:
340523 1980 0101 0013這個身份證號的含義:
34為安徽省
05為馬鞍山市
23為和縣
19800101為出生日期(1980年1月1日)
001為順序號(1為單數,代表為男性)
3為驗證碼
最新縣及縣以上行政區劃代碼(截止2014年10月31日)
北京市 (110000 BJ)
天津市 (120000 TJ)
河北省 (130000 HE)
山西省 (140000 SX)
內蒙古自治區 (150000 NM)
遼寧省 (210000 LN)
吉林省 (220000 JL)
黑龍江省 (230000 HL)
上海市 (310000 SH)
江蘇省 (320000 JS)
浙江省 (330000 ZJ)
安徽省 (340000 AH)
福建省 (350000 FJ)
江西省 (360000 JX)
山東省 (370000 SD)
河南省 (410000 HA)
湖北省 (420000 HB)
湖南省 (430000 HN)
廣東省 (440000 GD)
廣西壯族自治區 (450000 GX)
海南省 (460000 HI)
重慶市 (500000 CQ)
四川省 (510000 SC)
貴州省 (520000 GZ)
云南省 (530000 YN)
西藏自治區 (540000 XZ)
陜西省 (610000 SN)
甘肅省 (620000 GS)
青海省 (630000 QH)
寧夏回族自治區 (640000 NX)
新疆維吾爾自治區 (650000 XJ)
臺灣省 (710000 Tw)
香港特別行政區 (810000 HK)
澳門特別行政區 (820000 Mo)
將身份證號碼前面的17位數分別乘以不同的系數;
從第一位到第十七位的系數分別為:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
將這17位數字和系數相乘的結果相加;
用加出來和除以11,看余數是多少;
余數只可能有0-1-2-3-4-5-6-7-8-9-10這11個數字;
其分別對應的最后一位身份證的號碼為1-0-X-9-8-7-6-5-4-3-2
通過上面得知如果余數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果余數是10,身份證的最后一位號碼就是2。
舉例:
某男性的身份證號碼是340523198001010013。我們要看看這個身份證是不是合法的身份證。
首先我們得出前17位的乘積和: (3*7+4*9+0*10+5*5+2*8+3*4+1*2+9*1+8*6+0*3+0*7+1*9+0*10+1*5+0*8+0*4+1*2) = 185 然后再求余: 185 % 11 = 9 最后通過對應規則就可以知道余數9對應的數字是3。所以,可以判定這是一個合格的身份證號碼。JavaScript校驗18位身份證
var city = {11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江 ",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北 ",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"云南",54:"西藏 ",61:"陜西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"}; var ID = "340523198001010013";
首先校驗位數是否是18位:
if(!/^d{17}(d|x)$/i.test(ID)) return false; // d 匹配數字 // ^ 匹配開始 // $ 匹配結尾 // i 不區分大小寫 // {17} 匹配17次 // d|x 匹配數字或x
然后校驗開頭兩位是否是合法的省(直轄市/自治區):
if(city[ID.substr(0,2)] === undefined) return "非法地區"; // stringObject.substr(start,length) 方法可在字符串中抽取從 start 下標開始的指定數目的字符 // 訪問對象屬性時除了可以用點(.)語法外,也可以用中括號([]),用中括號時更靈活
然后再校驗出生日期是否合法:
var birthday = ID.substr(6, 4) + "/" + Number(ID.substr(10, 2)) + "/" + Number(ID.substr(12, 2)); var d = new Date(birthday); var newBirthday = d.getFullYear() + "/" + Number(d.getMonth() + 1) + "/" + Number(d.getDate()); var currentTime = new Date().getTime(); var time = d.getTime(); if(time >= currentTime || birthday !== newBirthday) return "非法生日"; // 獲取身份證的年月日,然后再 new 一個 Date,再對比這兩個日期是否一致 // 這里用Number()主要是因為身份證的日期是帶0的,而new Date()出來的日期是不帶0的,Number()之后就都不帶0了
最后判斷校驗碼是否正確:
var arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; var arrCh = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; var sum = 0, i, residue; for(i=0; i<17; i++) { sum += ID.substr(i, 1) * arrInt[i]; } residue = arrCh[sum % 11]; if (residue !== ID.substr(17, 1)) "非法證號";
如果以上校驗都通過了,則是一個合法的身份證號;
完整代碼 參考鏈接文中所使用的身份證號是隨機寫的一個合格的身份證~僅做演示使用
http://www.douban.com/note/200297488/
http://gongwen.sinaapp.com/article-126-cmd
http://www.cnblogs.com/devinhua/articles/1726292.html
http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78662.html
摘要:簡言在做用戶實名驗證時,常會用到身份證號碼的正則表達式及校驗方案。身份證號碼說明居民身份證號碼,正確正式的稱謂應該是公民身份號碼。也有說法表述開頭是外國人取得中國身份證號碼的前兩位編碼,但本人并未得到證實。 簡言 在做用戶實名驗證時,常會用到身份證號碼的正則表達式及校驗方案。本文列舉了兩種驗證方案,大家可以根據自己的項目實際情況,選擇適合的方案。 showImg(https://seg...
摘要:將加法和加上校驗位能被整除。下面分別分析出生日期和校驗位檢查生日日期是否正確輸入的身份證號里出生日期不對將位身份證轉成位校驗位按照的規定生成,可以認為是數字。校驗位按照的規定生成,可以認為是數字。表示全部為中文為不全是中文,或沒有中文。 判斷是否是合理的銀行卡卡號 //Description: 銀行卡號Luhm校驗 //Luhm校驗規則:16位銀行卡號(19位通用): // 1.將...
摘要:例也可通過驗證,而月并不存在日校驗碼是由位本體碼計算得出,方案并未校驗此碼這個鏈接中的位正則表達式錯的,最后順序碼應該是位。 身份證正則表達式 在項目中遇到身份證號碼驗證,百度了一些資料,太簡單的和太復雜的pass,綜合了一些案例,取長補短,形成了個折中版本的,正則表達式如下: var reg =/(^[1-9]d{5}(18|19|([23]d))d{2}((0[1-9])|(10|...
摘要:由于項目需要,代碼需要驗證身份證,摸索著學習,寫了一個驗證函數,直接上代碼省級地址華北北京,天津,河北,山西,內蒙古東北遼寧,吉林,黑龍江華東上海,江蘇,浙江,安徽,福建,江西,山東華中河南,湖北,湖南華南廣東,廣西,海南西南四川,貴州,云 由于項目需要,代碼需要驗證身份證,摸索著學習,寫了一個驗證函數,直接上代碼: 省級地址: 華北: 北京11,天津12,河北13,山西14,內蒙古1...
摘要:中華人民共和國居民身份證驗證規則如下號碼的結構公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。 在一些需要填寫身份證的表單網頁中,需要對身份證的輸入做一個驗證,于是,我記錄下了自己寫的驗證。在寫驗證之前,我們需要理解身份證的一些常識規則。中華人民共和國居民身份證驗證規則如下: 1.號...
閱讀 2048·2021-11-08 13:22
閱讀 2509·2021-09-04 16:40
閱讀 1153·2021-09-03 10:29
閱讀 1718·2019-08-30 15:44
閱讀 2125·2019-08-30 11:13
閱讀 2793·2019-08-29 17:07
閱讀 1970·2019-08-29 14:22
閱讀 1252·2019-08-26 14:00