写一个java代码根据身份证获取出生年月日,性别,年龄
时间: 2023-03-29 08:03:16 浏览: 45
您好,根据您提供的问题,我可以回答。以下是Java代码示例:
```
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class IDCardUtil {
/**
* 根据身份证号获取出生日期、性别、年龄
* @param idCard 身份证号
* @return 身份证信息数组,依次为出生日期、性别、年龄
*/
public static String[] getIDCardInfo(String idCard) {
String[] info = new String[3];
String birthday = "";
String gender = "";
int age;
if (idCard.length() == 18) {
// 获取出生日期
birthday = idCard.substring(6, 10) + "-" + idCard.substring(10, 12) + "-" + idCard.substring(12, 14);
// 获取性别
int genderCode = Integer.parseInt(idCard.substring(16, 17));
gender = genderCode % 2 == ? "女" : "男";
// 获取年龄
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date birthDate = sdf.parse(birthday);
Calendar cal = Calendar.getInstance();
if (cal.before(birthDate)) {
throw new IllegalArgumentException("身份证号码不正确,出生日期晚于当前时间!");
}
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH) + 1;
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
cal.setTime(birthDate);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH) + 1;
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
age = yearNow - yearBirth;
if (monthNow < monthBirth || (monthNow == monthBirth && dayOfMonthNow < dayOfMonthBirth)) {
age--;
}
} catch (ParseException e) {
throw new IllegalArgumentException("身份证号码不正确,出生日期格式错误!");
}
info[] = birthday;
info[1] = gender;
info[2] = String.valueOf(age);
} else {
throw new IllegalArgumentException("身份证号码长度不正确!");
}
return info;
}
}
```
使用示例:
```
public static void main(String[] args) {
String idCard = "110101199003077890";
String[] info = IDCardUtil.getIDCardInfo(idCard);
System.out.println("出生日期:" + info[]);
System.out.println("性别:" + info[1]);
System.out.println("年龄:" + info[2]);
}
```
输出结果:
```
出生日期:199-03-07
性别:男
年龄:31
```