sql正则匹配身份证号
时间: 2023-10-21 07:05:04 浏览: 53
可以使用MySQL的正则表达式函数REGEXP来匹配身份证号。身份证号的正则表达式可以参考以下代码:
```
SELECT * FROM table_name WHERE id_number REGEXP '^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dX]$';
```
其中,id_number为身份证号所在的列名,正则表达式中的^表示匹配字符串的开头,$表示匹配字符串的结尾,[1-9]\\d{5}表示前6位为非零数字,(18|19|20)\\d{2}表示年份为18、19或20开头的4位数字,(0[1-9]|1[0-2])表示月份为01到12之间的2位数字,(0[1-9]|[12]\\d|3[01])表示日期为01到31之间的2位数字,\\d{3}表示后面3位为任意数字,[\\dX]表示最后一位为数字或者大写字母X。
相关问题
sql身份证号正则验证
可以使用正则表达式来验证身份证号码是否符合规范,以下是一种常见的 SQL 正则表达式:
```sql
SELECT *
FROM users
WHERE REGEXP_LIKE(id_card, '^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])([0-2][1-9]|[1-3]\d|4[0-6]|5[0-3])\d{3}([0-9]|X)$');
```
其中,`id_card` 是要验证的身份证号码字段。这个正则表达式的含义是:
- `^` 匹配字符串的开始位置
- `[1-9]` 匹配 1-9 中的任意一个数字
- `\d{5}` 匹配 5 个数字
- `(19|20)` 匹配 19 或 20
- `\d{2}` 匹配 2 个数字
- `(0[1-9]|1[0-2])` 匹配 01-12 中的任意一个数字
- `([0-2][1-9]|[1-3]\d|4[0-6]|5[0-3])` 匹配 01-31 中的任意一个数字
- `\d{3}` 匹配 3 个数字
- `([0-9]|X)` 匹配 0-9 或 X
- `$` 匹配字符串的结束位置
这个正则表达式可以匹配符合规范的 18 位身份证号码。
sql server验证身份证号的正则表达式
下面是一个用于验证中国身份证号的正则表达式:
```sql
^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[0-9xX]$
```
该正则表达式的含义如下:
- `^`:匹配字符串的开始位置。
- `[1-9]`:匹配第一位数字,不能为0。
- `\d{5}`:匹配6-10位数字。
- `(19|20)\d{2}`:匹配出生年份,必须是19或20开头的4位数字。
- `(0[1-9]|1[0-2])`:匹配出生月份,必须是01-12之间的2位数字。
- `(0[1-9]|[1-2]\d|3[0-1])`:匹配出生日期,必须是01-31之间的2位数字。
- `\d{3}`:匹配身份证号码的倒数第二位到第四位(顺序是倒过来的)。这三位数字是随机数。
- `[0-9xX]`:匹配身份证号码的最后一位,可以是数字0-9或字母x或字母X。
- `$`:匹配字符串的结束位置。
你可以在查询中使用 `LIKE` 操作符和该正则表达式来验证身份证号,例如:
```sql
SELECT *
FROM my_table
WHERE id_card_number LIKE '^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[0-9xX]$'
```