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: JS正则表达式可以用来匹配18位身份证号身份证号一般由17位数字和最后一位数字(可能为数字或"X")组成。 以下是一个可以匹配18位身份证号正则表达式示例: ```javascript var regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/; ``` 具体解释如下: - `^[1-9]`:匹配开头,第一位不能为0。 - `\d{5}`:后面接5个数字,匹配前6位行政区划代码。 - `(19|20)\d{2}`:匹配年份,可以是19或20开头的4位数字。 - `(0[1-9]|1[0-2])`:匹配月份,可以是01到12之间的数字。 - `(0[1-9]|[12]\d|3[01])`:匹配日期,可以是01到31之间的数字。 - `\d{3}`:匹配顺序码,后面3位数字。 - `(\d|X)$`:匹配校验码,可以是数字或大写字母"X"。$表示匹配结尾。 使用以上正则表达式可以通过以下代码进行验证: ```javascript var idCard = "123456789012345678"; if (regex.test(idCard)) { console.log("验证通过"); } else { console.log("身份证号格式正确"); } ``` 以上是一个简单的18位身份证号正则表达式解释,希望对您有帮助。 ### 回答2: JS中使用正则表达式验证18位身份证号的逻辑如下: 1. 首先,通过正则表达式字面量创建一个匹配规则,可以使用以下代码创建正则表达式: ```js let reg = /^\d{17}[\dX]$/; ``` 这个正则表达式的含义是,首先匹配17位数字,然后匹配最后一位是数字或者字母X。 2. 将身份证号传入reg.test()方法中进行验证: ```js let idNumber = '身份证号'; // 替换为实际的身份证号 let isValid = reg.test(idNumber); if (isValid) { console.log('身份证号格式正确'); } else { console.log('身份证号格式错误'); } ``` 如果身份证号格式正确,会输出"身份证号格式正确",否则输出"身份证号格式错误"。 需要注意的是,仅仅验证身份证号格式是不够的,还需要进一步的校验身份证号的有效性,包括校验生日、地区码和校验位等。这个逻辑比较复杂,可以使用开源的库如`id-validator`来进行更全面的身份证号验证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值