java实现从键盘 输入一个身份证号码字符串,判断输入的字符串是否符合身份证号码胡规则, * 如果符合,计算输出年龄 输出它的年龄,输出你 出生在那一年的第几周以及出生到现在已经经过了几周了。 * 如果不符合,提示,并让其重新输入。直到输入正确省份证号码为止。
时间: 2024-09-20 13:05:12 浏览: 100
在Java中,可以使用正则表达式来验证身份证号码的格式,然后利用身份证号码的编码规则(例如,前六位代表出生日期、倒数第二位代表性别等)来计算年龄。以下是实现这个功能的一个基本步骤:
1. 首先,创建一个函数,用于验证身份证号码的格式。中国的身份证号码通常由18位数字组成,分为6+8+3的结构,中间还可能包含字符'*'作为部分信息隐藏。
```java
import java.util.Scanner;
public boolean isValidID(String id) {
String regex = "^(\\d{6})(18|19|20)?(\\d{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])((\\d|X|x)(\\d|X|x))$";
return id.matches(regex);
}
```
2. 然后获取用户输入并不断循环,直到输入有效身份证号码:
```java
Scanner scanner = new Scanner(System.in);
String input;
do {
System.out.println("请输入身份证号码(格式:xxxxxxxxxxxxxxxyy):");
input = scanner.nextLine();
} while (!isValidID(input));
```
3. 计算年龄。身份证的第7到14位表示的是出生年月日,我们假设最后一位数字是校验码不影响出生日期,那么可以直接提取出来计算:
```java
int birthYear = Integer.parseInt(input.substring(6, 10));
int birthMonth = Integer.parseInt(input.substring(10, 12));
int birthDay = Integer.parseInt(input.substring(12, 14));
// 根据当前日期计算年龄
LocalDate currentDate = LocalDate.now();
int currentYear = currentDate.getYear();
int age = currentYear - birthYear;
if (birthMonth < currentDate.getMonthValue() || (birthMonth == currentDate.getMonthValue() && birthDay <= currentDate.getDayOfMonth())) {
--age; // 如果今年还未过生日,则减一
}
```
4. 计算出生周数和至今已过的周数。这需要用到`java.time`包:
```java
int weeksSinceBirth = currentDate.lengthOfMonth() - birthDay + 1; // 生日所在月的总天数
int weeksPassed = Period.between(birthDate.atStartOfDay(), currentDate).getWeeks(); // 从生日到现在的周数
System.out.println("您的年龄是:" + age + "岁");
System.out.println("您出生于" + birthYear + "年的第" + weeksSinceBirth + "周");
System.out.println("出生至今已经过了" + weeksPassed + "周");
```
5. 结束循环程序:
```java
scanner.close();
```
如果输入的不是有效的身份证号码,会提示用户重新输入。注意,这个示例假设身份证号码的倒数第二位是奇数才代表男性,偶数代表女性。对于实际应用,需要处理X作为校验码的情况。另外,为了更准确地获取出生日期,还可以通过查询数据库来验证。
阅读全文