两种校验身份证号的正则表达式写法

1.按位数及特殊字符限制校验

二代身份证位数为18位,其中个别含有特殊字符X(x),所以数字部分为17位;一代身份证位数为15位;因此全部情况分为三种。

String regexsfz = "(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(X|x)$)";

2.按身份证组成结构校验

根据身份证号的具体组成,分别需要校验前六位,出生日期八位,最后四位。

String regexsfz2 = "(^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0-2][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X]|[x])$)";

下面是具体分析的过程 :前六位中首位不能是数字0,所以首位校验为[1-9],剩余五位为[0-9];出生日期中年份月份与天数按当前日历情况校验;最后四位中第四位可能为X(x),所以校验要加上这一情况。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值