接受键盘输入的字符串,判断其是否为合法的身份证号码,在命令行中输出验证结果。只要求验证18位身份证号。 基本过程: 使用scanner接受键盘输入 1、判断输入内容是否为空 2、判断输入字符串是否为18位 3、判断前17位是否为数字,最后1位是否为数字或X 4、判断7至14位是否为合法的日期(年符合1900至2019,月符合1至12,日符合各月的天数,可选是否考虑闰年情况,若不考虑闰年情况,2月天数一律视为28天)
时间: 2023-10-26 08:38:40 浏览: 127
好的,下面是代码实现,可以直接复制粘贴运行:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入18位身份证号码:");
String idNum = scanner.nextLine();
// 判断输入是否为空
if (idNum == null || idNum.trim().isEmpty()) {
System.out.println("输入为空,请重新输入!");
return;
}
// 判断是否为18位
if (idNum.length() != 18) {
System.out.println("输入的不是18位身份证号码!");
return;
}
// 判断前17位是否为数字,最后1位是否为数字或X
String idNum17 = idNum.substring(0, 17);
String idNum18 = idNum.substring(17);
if (!idNum17.matches("\\d{17}") || !idNum18.matches("[\\dX]")) {
System.out.println("输入的身份证号码格式不正确!");
return;
}
// 判断7至14位是否为合法的日期
String yearStr = idNum.substring(6, 10);
String monthStr = idNum.substring(10, 12);
String dayStr = idNum.substring(12, 14);
int year, month, day;
try {
year = Integer.parseInt(yearStr);
month = Integer.parseInt(monthStr);
day = Integer.parseInt(dayStr);
} catch (NumberFormatException e) {
System.out.println("输入的身份证号码格式不正确!");
return;
}
if (year < 1900 || year > 2019 || month < 1 || month > 12) {
System.out.println("输入的身份证号码格式不正确!");
return;
}
int maxDays = 0;
switch (month) {
case 2:
maxDays = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 29 : 28;
break;
case 4:
case 6:
case 9:
case 11:
maxDays = 30;
break;
default:
maxDays = 31;
}
if (day < 1 || day > maxDays) {
System.out.println("输入的身份证号码格式不正确!");
return;
}
// 输入的身份证号码格式正确
System.out.println("输入的身份证号码格式正确!");
}
}
```
注意:上述代码中的正则表达式只是简单判断,实际上身份证号码的格式规范比较复杂,如区域码、校验码等都需要进行验证。
阅读全文