Java-18位身份证号的正则表达式。帮忙拆一下代码。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java-18位身份证号的正则表达式。帮忙拆一下代码。相关的知识,希望对你有一定的参考价值。

这个简单。

代码是:^[1-9]\d5[1-9]\d3((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d3([0-9]|X)$
因为代码太长,不好看懂。大家帮忙把代码拆分一下,写到下面对应的每个语句的冒号后面。只要拆一下代码就行了,谢谢。

18位身份证号码各位的含义:
1-2位省、自治区、直辖市代码:
3-4位地级市、盟、自治州代码:
5-6位县、县级市、区代码:
7-14位出生年月日,比如19670401代表1967年4月1日;:
15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数:
18位为校验码,0-9和X。作为尾号的校验码,是由把前十七位数字带入统一的公式计算出来的,计算的结果是0-10,

^ 匹配字符串的开始
[1-9] 第1位:1-9
\d5 第2-6位:0-9
[1-9] 第7位:1-9
\d3 第8-10位:0-9
((0\d)|(1[0-2])):
第11-12位:(00-09)或(10-12)
(([0|1|2]\d)|3[0-1])
第13-14位:(00-29)或(30-31)
\d3 第15-17位:0-9
([0-9]|X)
第18位:0-9或X
$ 匹配字符串的结束
参考技术A 自问自答?追问

不是啊,帮忙拆一下代码。

追答

从正则看并没有按代码含义设置,我来分析一下:(每一行最后的数字代表对应的位数)
^[1-9] 这是第一位只能使用1到9中的任意一个数字;1

\d5 这是接下来的5位必须是数字;2、3、4、5、6

[1-9]只能使用1到9中的任意一个数字;7
\d33位必须是数字;8、9、10
((0\d)|(1[0-2]))分组,0和一个数字或者1和0到2之间的一个数字;11、12
(([0|1|2]\d)|3[0-1])分组,0或1或2和一个数字或者3和0或1的组合;13、14
\d3三位数字;15、16、17
([0-9]|X)$最后一位0到9的一个数字或者是X;18

这里面不涉及验证最后一位。

本回答被提问者采纳

以上是关于Java-18位身份证号的正则表达式。帮忙拆一下代码。的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式如何验证身份证号?

验证身份证号码的正确正则表达式

java用正则表达式判断一个18位身份证号是不是有效

Android 正则表达式验证手机号姓名(包含少数民族)身份证号

如何用javascript正则表达式验证身份证号

JS验证身份证的正则表达式?