正则表达式验证身份证号是否合法
时间: 2023-11-05 09:05:23 浏览: 136
身份证号是中国公民在办理各种证件、银行开户、办理保险等方面必须提供的重要证件,其合法性非常重要。以下是一个简单的正则表达式,可以验证身份证号是否合法:
^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
这个正则表达式的含义如下:
- ^ 表示字符串的开始
- [1-9] 表示第一位必须是1-9中的任意一个数字
- \d{5} 表示接下来的5位必须是数字
- (18|19|([23]\d)) 表示接下来的2位必须是18、19或20-23中的任意一个数字
- \d{2} 表示接下来的2位必须是数字
- ((0[1-9])|(1[0-2])) 表示接下来的2位必须是01-09或10-12中的任意一个数字
- (([0-2][1-9])|10|20|30|31) 表示接下来的2位必须是01-09、10-29、30或31中的任意一个数字
- \d{3} 表示接下来的3位必须是数字
- [0-9Xx] 表示最后一位必须是数字或者字母X(大小写均可)
- $ 表示字符串的结束
使用这个正则表达式可以有效地验证身份证号是否合法。
相关问题
java正则表达式验证身份证
在Java中,可以使用正则表达式来验证身份证号码的合法性。下面是一个示例代码:
```java
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Main {
public static void main(String[] args) {
String idCardNumber = "身份证号码"; // 替换为要验证的身份证号码
// 正则表达式
String regex = "^\\d{17}(\\d|x|X)$";
// 创建 Pattern 对象
Pattern pattern = Pattern.compile(regex);
// 创建 Matcher 对象
Matcher matcher = pattern.matcher(idCardNumber);
// 判断是否匹配
if (matcher.matches()) {
System.out.println("身份证号码合法");
} else {
System.out.println("身份证号码不合法"); }
}
}
```
这段代码使用了正则表达式 `^\\d{17}(\\d|x|X)$` 来验证身份证号码的合法性。其中,`^` 表示字符串的开始,`\\d{17}` 表示匹配17个数字,`(\\d|x|X)` 表示匹配一个数字或字母x或字母X,`$` 表示字符串的结束。
如果身份证号码合法,输出结果为"身份证号码合法";如果身份证号码不合法,输出结果为"身份证号码不合法"。
使用正则表达式匹配身份证号
可以使用以下正则表达式验证身份证号格式是否合法:
```python
import re
id_card = input("请输入身份证号:")
# 正则表达式
pattern = r'^[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]$'
if re.match(pattern, id_card):
print("身份证号格式合法!")
else:
print("身份证号格式不合法!")
```
其中,正则表达式的含义如下:
- `^` 表示匹配字符串的开头;
- `[1-9]` 表示第一位必须是非零数字;
- `\d{5}` 表示接下来的 5 位可以是任意数字;
- `(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}` 表示接下来的 3 位可以是任意数字;
- `[0-9Xx]` 表示最后一位可以是数字或者大写字母 X 或小写字母 x;
- `$` 表示匹配字符串的结尾。
如果输入的身份证号符合以上规则,则输出“身份证号格式合法!”;否则输出“身份证号格式不合法!”
阅读全文