根据身份证号码计算年龄(根据是否过生日判断周岁年龄)及性别
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
public class MyDateUtils {
private MyDateUtils() {
throw new IllegalStateException("MyDateUtils class");
}
public static final String DATE_FORMAT_YMD = "yyyy-MM-dd";
/**
* 分析身份证号, 得出性别,年龄,是否有效年龄
* @param idCardNo
* @return
* @throws ParseException
*/
public static Map<String, Object> analyzingIdCardNo(String idCardNo) {
Map<String, Object> rtnMap = new HashMap<>();
Calendar sysCal = Calendar.getInstance();
sysCal.set(Calendar.HOUR_OF_DAY, 0);
sysCal.set(Calendar.MINUTE, 0);
sysCal.set(Calendar.SECOND, 0);
Calendar cardCal = Calendar.getInstance();
cardCal.setTime(convertStr2Date(idCardNo.substring(6, 14)));
// 计算年龄
int age = sysCal.get(Calendar.YEAR) - cardCal.get(Calendar.YEAR);
int sysMonth = sysCal.get(Calendar.MONTH);
int cardMonth = cardCal.get(Calendar.MONTH);
if (sysMonth <= cardMonth) {
if (sysMonth == cardMonth) {
if (sysCal.get(Calendar.DAY_OF_MONTH) < cardCal.get(Calendar.DAY_OF_MONTH))
age--; // 当前日期在生日之前,则年龄减一
} else {
age--; // 当前月份在生日之前,则年龄减一
}
}
// 性别
int sex = Integer.parseInt(idCardNo.substring(16, 17)) % 2;
// 判断岁数
sysCal.add(Calendar.DAY_OF_MONTH, 60);
cardCal.add(Calendar.YEAR, sex == 1 ?60 :50);
if (cardCal.compareTo(sysCal) > 0) {
rtnMap.put("ok", "1");
rtnMap.put("性别", sex == 1 ?"男" :"女");
rtnMap.put("年龄", age);
}
return rtnMap;
}
/**
* 字串转日期(零时零分零秒)
* @param dateStr
* @param format "yyyy-MM-dd/yyyyMMddHHmmss/yyyy-MM-dd HH:mm:ss"
* @return
* @throws ParseException
*/
public static Date convertStr2Date(String dateStr) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
try {
return sdf.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 日期格式化
* @param date
* @param fmt
* @return
*/
public static String convertDate2Format(Date date, String fmt) {
return new SimpleDateFormat(StringUtils.isBlank(fmt) ?DATE_FORMAT_YMD :fmt).format(date);
}
}
版权声明:本文为qq_22143389原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。