接受键盘输入的字符串,判断其是否为合法的身份证号码,在命令行中输出验证结果。只要求验证18位身份证号。 基本过程: 使用scanner接受键盘输入 1、判断输入内容是否为空 2、判断输入字符串是否为18位 3、判断前17位是否为数字,最后1位是否为数字或X 4、判断7至14位是否为合法的日期(年符合1900至2019,月符合1至12,日符合各月的天数,可选是否考虑闰年情况,若不考虑闰年情况,2月天数一律视为28天)
时间: 2023-10-26 15:38:49 浏览: 72
pb验证身份证号输入的正确性(可以对身份证号码的第18位校验位进行判断)
好的,下面是判断身份证号码是否合法的代码实现:
```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 语句来判断各月的天数,考虑了闰年和平年的情况。
希望这个代码能够帮助到你!
阅读全文