从键盘上输入身份证号,使用正则表达式验证身份证号格式是否合法。
时间: 2023-04-15 15:00:48 浏览: 126
可以使用以下正则表达式验证身份证号格式是否合法:
```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;
- `$` 表示匹配字符串的结尾。
如果输入的身份证号符合以上规则,则输出“身份证号格式合法!”;否则输出“身份证号格式不合法!”
相关问题
从键盘输入某个人的身份证号,首先判断是否是一个合法的身份证号。如果是合法的身份证号,输出这个人的出生日期及性别;如果不是合法的身份证号,提示用户重新输入。若输入三次仍然为非法的身份证号,则结束输入,并输出信息“输入的身份证号无法识别”。用python
在Python中,你可以使用正则表达式来验证身份证号码的合法性,并通过ID号码的最后两位来确定性别和出生日期。以下是一个简单的实现示例:
```python
import re
def validate_id(id_num):
# 正则表达式匹配中国大陆的18位身份证号码
regex = r'^\d{15}(?:\d{2}[0-9Xx])?|^\d{17}(\d|x)$'
if not re.match(regex, id_num):
return False
# 判断性别,最后一位是奇数代表男性,偶数代表女性
sex = '男' if int(id_num[-2]) % 2 else '女'
# 出生年月日计算,前六位是年份,接下来的两个是月份,最后两个是日子,注意需要转换
birth_date = f"{id_num[:6]}-{id_num[6:8]}-{id_num[8:10]}"
return sex, birth_date
def get_valid_id():
for _ in range(3):
id_num = input("请输入身份证号码:")
is_valid, result = validate_id(id_num)
if is_valid:
print(f"身份证号合法,出生日期:{result},性别:{sex}")
break
else:
print("输入的身份证号无效,请重新输入。")
else:
print("输入的身份证号无法识别,程序结束。")
get_valid_id()
```
在这个脚本中,我们首先定义了一个`validate_id`函数来检查输入的身份证号码是否符合规则,然后在`get_valid_id`函数里循环请求用户输入,直到输入一个有效的身份证号码为止。如果连续三次输入都无效,就会显示相应的错误消息。
接受键盘输入的字符串,判断其是否为合法的身份证号码,在命令行中输出验证结果。只要求验证18位身份证号。 基本过程: 使用scanner接受键盘输入 1、判断输入内容是否为空 2、判断输入字符串是否为18位 3、判断前17位是否为数字,最后1位是否为数字或X 4、判断7至14位是否为合法的日期(年符合1900至2019,月符合1至12,日符合各月的天数,可选是否考虑闰年情况,若不考虑闰年情况,2月天数一律视为28天)
好的,下面是判断身份证号码是否合法的代码实现:
```java
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入身份证号码:");
String id = scanner.nextLine();
if (id.isEmpty()) {
System.out.println("身份证号码不能为空!");
return;
}
if (id.length() != 18) {
System.out.println("身份证号码长度必须为18位!");
return;
}
String pattern = "^\\d{17}[\\dX]$";
if (!id.matches(pattern)) {
System.out.println("身份证号码格式不正确!");
return;
}
int year = Integer.parseInt(id.substring(6, 10));
int month = Integer.parseInt(id.substring(10, 12));
int day = Integer.parseInt(id.substring(12, 14));
if (year < 1900 || year > 2019) {
System.out.println("身份证号码中的年份不合法!");
return;
}
if (month < 1 || month > 12) {
System.out.println("身份证号码中的月份不合法!");
return;
}
int maxDay;
switch (month) {
case 2:
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
maxDay = 29; // 闰年2月有29天
} else {
maxDay = 28; // 平年2月有28天
}
break;
case 4:
case 6:
case 9:
case 11:
maxDay = 30; // 4,6,9,11月有30天
break;
default:
maxDay = 31; // 其他月份有31天
}
if (day < 1 || day > maxDay) {
System.out.println("身份证号码中的日期不合法!");
return;
}
System.out.println("身份证号码合法!");
}
}
```
在代码中,我们使用了正则表达式来验证身份证号码是否符合格式要求,使用了字符串的 substring 方法来获取身份证中的年、月、日信息,使用了 switch 语句来判断各月的天数,考虑了闰年和平年的情况。
希望这个代码能够帮助到你!
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![.zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)