输入一个身份证序列,检查是否是正确的表示?提取身份证序列的出生年月信息? 判断是否是2000年出生的千禧宝宝? 身份证的第十七位数字代表性别,即倒数第二位。双数代表女性,单数代表男性。java
时间: 2024-04-21 07:29:52 浏览: 153
以下是Java代码实现:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.time.LocalDate;
public class IdCardUtils {
public static boolean checkIdCard(String idCard) {
// 校验身份证号码是否合法
// 身份证号码的正则表达式
String pattern = "^\\d{17}[\\dXx]$";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(idCard);
if (!m.matches()) {
return false;
}
// 校验身份证号码的校验位是否正确
int[] wi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};
int[] ai = new int[17];
for (int i = 0; i < 17; i++) {
ai[i] = Integer.parseInt(Character.toString(idCard.charAt(i)));
}
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += ai[i] * wi[i];
}
String checkCode = "10X98765432";
return Character.toLowerCase(checkCode.charAt(sum % 11)) == Character.toLowerCase(idCard.charAt(17));
}
public static LocalDate getBirthday(String idCard) {
// 提取身份证号码中的出生年月信息
int year = Integer.parseInt(idCard.substring(6, 10));
int month = Integer.parseInt(idCard.substring(10, 12));
int day = Integer.parseInt(idCard.substring(12, 14));
return LocalDate.of(year, month, day);
}
public static boolean isMillennial(String idCard) {
// 判断是否是2000年出生的千禧宝宝
LocalDate birthday = getBirthday(idCard);
return birthday.getYear() == 2000;
}
public static String getGender(String idCard) {
// 获取身份证号码中的性别信息
int genderCode = Integer.parseInt(Character.toString(idCard.charAt(16)));
if (genderCode % 2 == 0) {
return "女";
} else {
return "男";
}
}
public static void main(String[] args) {
String idCard = "110101200001017654";
if (checkIdCard(idCard)) {
System.out.println("身份证号码合法");
System.out.println("出生年月:" + getBirthday(idCard));
if (isMillennial(idCard)) {
System.out.println("是2000年出生的千禧宝宝");
} else {
System.out.println("非2000年出生的千禧宝宝");
}
System.out.println("性别:" + getGender(idCard));
} else {
System.out.println("身份证号码不合法");
}
}
}
```
使用正则表达式和校验码校验身份证号码是否合法。利用Java内置的LocalDate类提取出生年月信息。通过判断出生年份是否为2000年,来判断是否是2000年出生的千禧宝宝。根据身份证号码的倒数第二位数字来判断性别。
阅读全文