JAVA工具类-根据身份证进行性别和年龄计算

  • Post author:
  • Post category:java


根据身份证号码计算年龄(根据是否过生日判断周岁年龄)及性别

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 版权协议,转载请附上原文出处链接和本声明。