在实际项目中,身份证号码的验证是一个很常见的需求。而用正则表达式进行身份证号码的验证,是一种快捷、方便、且效果好的方法。本文从多个方面来深入解析身份证号正则表达式,并全面掌握身份证号码验证规则,以方便大家在实际开发中快速进行身份证号码的验证。
一、正则表达式的基础知识
正则表达式是用来描述字符串模式的一种工具,可以用来匹配、查找、替换字符串中的模式。在正则表达式中,常用的元字符有:
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/n/199827.html