在實際項目中,身份證號碼的驗證是一個很常見的需求。而用正則表達式進行身份證號碼的驗證,是一種快捷、方便、且效果好的方法。本文從多個方面來深入解析身份證號正則表達式,並全面掌握身份證號碼驗證規則,以方便大家在實際開發中快速進行身份證號碼的驗證。
一、正則表達式的基礎知識
正則表達式是用來描述字符串模式的一種工具,可以用來匹配、查找、替換字符串中的模式。在正則表達式中,常用的元字符有:
1. “.” – 匹配除換行符以外的任意字符
2. “^” – 匹配行首
3. “$” – 匹配行尾
4. “*” – 匹配前面的字符零次或多次
5. “+” – 匹配前面的字符一次或多次
6. “?” – 匹配前面的字符零次或一次
7. “[]” – 匹配一個字符集,比如[abc]匹配a或b或c
8. “[^]” – 匹配非字符集中的任意字符
9. “{}” – 匹配一個範圍數量的字符,比如a{3,5}匹配aaa、aaaa、aaaaa
二、驗證身份證號碼的基本規則
在驗證身份證號碼的正則表達式中,需要考慮到身份證號碼的基本規則。身份證號碼由18個字符組成,由前17位數字和最後一位的校驗位組成。其中,前6位數字為行政區劃代碼,接下來8位數字為出生日期碼,後4位為順序碼和最後一位為校驗位。出生日期碼的格式為YYYYMMDD,例如19990101代表1999年1月1日。
而根據國家標準GB11643-1999《公民身份號碼》的規定,身份證號碼的校驗位的計算方法如下:
1. 將前17位數字乘上對應的係數,係數分別為:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2
2. 將乘積相加的和對11取餘數,得到餘數是0~10中的一個數
3. 根據餘數找到對應的校驗位,規則如下:
– 0:1
– 1:0
– 2:X
– 3:9
– 4:8
– 5:7
– 6:6
– 7:5
– 8:4
– 9:3
– 10:2
因此,根據身份證號碼的基本規則和校驗位的計算方法,可以得到如下的身份證號碼的正則表達式:
/^([1-9]\d{5})((19\d{2})|(20\d{2}))((0\d)|(1[0-2]))(([0-2]\d)|3[01])\d{3}([0-9]|X)$/
三、身份證號碼正則表達式的解析
在上述的身份證號碼的正則表達式中,有許多的細節需要注意,下面將一一進行解析,以便更好地掌握身份證號碼的驗證規則。
首先,正則表達式以”/”開頭和結尾,表示這是一個正則表達式。
/^([1-9]\d{5})((19\d{2})|(20\d{2}))((0\d)|(1[0-2]))(([0-2]\d)|3[01])\d{3}([0-9]|X)$/
緊接着,”^”表示字符串的開頭,”([1-9]\d{5})”表示匹配前6位行政區劃代碼,”([1-9]”表示第一位數字不為0,”\d{5})”表示後面5位數字可以為0~9中任意一個數字。
“((19\d{2})|(20\d{2}))”表示匹配年份,”(“和”)”用來將19\d{2}和20\d{2}分組,”|”表示或的關係。”\d”代表數字,”{2}”表示兩位數字。
“((0\d)|(1[0-2]))”表示匹配月份,”0\d”表示1~9月份,”1[0-2]”表示10~12月份。”(“和”)”用來將0\d和1[0-2]分組,”|”表示或的關係。
“(([0-2]\d)|3[01])”表示匹配日期,”[0-2]\d”表示01~29日,”3[01]”表示30~31日,”(“和”)”用來將[0-2]\d和3[01]分組,”|”表示或的關係。
“\d{3}”表示結合了年月日的後8位,可以為0~9中任意一個數字,共三位。
“([0-9]|X)$”表示校驗位的匹配,最後一位數字可以為0~9中任意一個數字或者大寫字母X,”$”表示字符串的結尾。
四、身份證號碼的校驗方法
在實際應用中,驗證身份證號碼的方法如下:
1. 根據正則表達式驗證身份證號碼是否符合規則
2. 如果符合規則,計算校驗位並進行比對
3. 如果校驗位匹配,則表明身份證號碼是正確的
下面是對驗證方法的代碼實現:
function validateIdNumber(idNumber) { var regex = /^([1-9]\d{5})((19\d{2})|(20\d{2}))((0\d)|(1[0-2]))(([0-2]\d)|3[01])\d{3}([0-9]|X)$/; if(!regex.test(idNumber)) { return false; } var factors = [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 < factors.length; i++) { sum += parseInt(idNumber[i]) * factors[i]; } var checkDigit = (12 - sum % 11) % 11; var checkDigitDict = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2]; if(idNumber[17] == checkDigitDict[checkDigit]) { return true; } return false; }
五、總結
在本文中,我們詳細介紹了身份證號碼正則表達式的基礎知識、驗證規則、正則表達式的解析和驗證身份證號碼的校驗方法。正則表達式雖然難以理解,但是掌握了其規則和特點,可以幫助我們快速、準確地完成身份證號碼的驗證。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/199827.html