正则表达式验证身份证号是否合法
时间: 2023-11-05 09:05:23 浏览: 94
以下是验证身份证号是否合法的正则表达式:
```python
^(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\d{3}[0-9Xx]$)$
```
正则表达式的解释:
- `^`:匹配字符串的开始位置
- `^[1-9]\d{5}`:匹配前6位地址码,第一位数字不能为0,后面5位数字可以为任意数字
- `(18|19|20)\d{2}`:匹配出生年份,必须为18、19或20开头的4位数字
- `(0[1-9]|1[0-2])`:匹配出生月份,必须为01-12之间的2位数字
- `(0[1-9]|[1-2][0-9]|3[0-1])`:匹配出生日期,必须为01-31之间的2位数字
- `\d{3}`:匹配顺序码,必须为3位数字
- `[0-9Xx]`:匹配校验码,必须为数字或字母X或x
- `$`:匹配字符串的结束位置
使用Python的re模块可以进行正则表达式的匹配,示例代码如下:
```python
import re
def validate_idcard(idcard):
pattern = r"^(^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\d{3}[0-9Xx]$)$"
if re.match(pattern, idcard):
return True
else:
return False
# 测试
print(validate_idcard("110101199003074678")) # True
print(validate_idcard("11010119900307467x")) # True
print(validate_idcard("11010119900307467")) # False
```
注意,此正则表达式只能验证身份证号码的格式是否正确,不能验证身份证号码是否真实存在。
阅读全文