js匹配正确身份证格式的正则

正确匹配(居民身份证号码)通常需要考虑15位和18位两种格式。18位身份证号码由17位数字本体码和1位校验码组成,校验码是根据前17位数字按照一定规则计算得出的。15位身份证是旧版的,现在已经全部升级为18位。但在某些情况下,仍然需要考虑15位身份证的兼容性。

/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\d{3}(\d|X)$/i

这个正则表达式解释如下:

^\d{6}:以6位数字开头,代表行政区划代码。
(18|19|20)?:可选的4位年份前缀,限定为18、19或20开头,适用于1900年至2099年之间的出生年份。这个部分是可选的,以便同时支持15位和18位身份证号码。
\d{2}:接着是2位出生年份的后两位(对于18位身份证),如果是15位身份证号码,则此部分省略。
(0[1-9]|1[0-2]):接着是2位月份,从01到12。
(0[1-9]|[12][0-9]|3[01]):接着是2位日期,从01到31。
\d{3}:接着是3位顺序码,对于18位身份证号码,顺序码偶数分配给女性,奇数分配给男性;对于15位身份证号码,则紧接着日期。
(\d|X):最后是1位校验码,可以是0到9的数字或者大写字母X(10的罗马数字表示)。对于15位身份证号码,没有校验码这一位。
i:正则表达式的修饰符,表示不区分大小写,因为校验码的X可以是大写也可以是小写。

请注意,

这个正则表达式主要用于格式校验,并不能完全保证身份证号码的合法性,因为它没有执行复杂的校验码计算和地区码的验证。如果需要进行更严格的校验,建议使用专门的库或者在后端进行校验,那样可以包括校验码的计算和地区码的有效性检查。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值