Java 身份证号获取性别和出生日期
引言
在日常生活中,我们经常会遇到需要根据身份证号来获取相关信息的场景,比如获取性别和出生日期。尤其在一些需要年龄、性别等信息进行验证或统计的业务场景中,对身份证号的解析变得尤为重要。本文将介绍如何使用 Java 编程语言来解析身份证号,获取其中的性别和出生日期。
身份证号的结构
身份证号是一串由数字和字母组成的字符串,其中包含了个人的身份信息,如性别、出生日期、所在地等。身份证号的结构如下所示:
XXXXXXXXYYYYMMDDZZZP
其中:
- XXXXXXXX:表示地区代码,代表了发证地的行政区划代码;
- YYYY:表示出生年份,如 1990 年,则为 1990;
- MM:表示出生月份,如 5 月,则为 05;
- DD:表示出生日期,如 15 日,则为 15;
- ZZZ:表示顺序码,用于区分同一地区同一天出生的不同人;
- P:表示性别码,奇数为男性,偶数为女性。
身份证号的校验
身份证号的最后一位是校验码,用于校验身份证号的合法性。校验码的计算方法如下:
- 将身份证号前 17 位的系数与对应位数上的数字相乘,得到乘积;
- 将乘积相加的结果除以 11,得到余数;
- 根据余数,查找对应的身份证号最后一位的校验码。
具体的计算过程如下所示:
public class IdCardUtils {
public static char calculateVerifyCode(String idCardNumber) {
char[] idCardArray = idCardNumber.toCharArray();
int sum = 0;
int[] coefficientArray = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] verifyCodeArray = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
for (int i = 0; i < 17; i++) {
sum += Character.digit(idCardArray[i], 10) * coefficientArray[i];
}
int remainder = sum % 11;
return verifyCodeArray[remainder];
}
}
性别和出生日期的提取
在了解了身份证号的结构和校验码的计算方法后,我们可以使用 Java 编写代码来获取身份证号中的性别和出生日期。下面是一个示例:
public class IdCardUtils {
public static String getGender(String idCardNumber) {
char genderCode = idCardNumber.charAt(idCardNumber.length() - 2);
if (Character.isDigit(genderCode)) {
int genderValue = Character.getNumericValue(genderCode);
return genderValue % 2 == 0 ? "女" : "男";
}
return null;
}
public static LocalDate getBirthDate(String idCardNumber) {
String birthDateStr = idCardNumber.substring(6, 14);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
return LocalDate.parse(birthDateStr, formatter);
}
}
在上述代码中,我们使用 String
类的 charAt()
方法获取身份证号倒数第二位的字符,该字符表示性别码。我们使用 Character.isDigit()
方法判断该字符是否是数字,然后根据性别码的奇偶性确定性别。对于出生日期的获取,我们使用 String
类的 substring()
方法截取身份证号中的出生日期部分,然后使用 LocalDate
类和 DateTimeFormatter
类来解析日期字符串。
类图
下面是身份证号解析的类图:
classDiagram
class IdCardUtils {
+calculateVerifyCode(String idCardNumber): char
+getGender(String idCardNumber): String
+getBirthDate(String idCardNumber): LocalDate
}