1. 程式人生 > >根據身份證計算年齡(週歲)

根據身份證計算年齡(週歲)

最近做的專案需要根據身份證來計算年齡,於是自己寫了一段程式碼,看了網上的一些計算年齡的程式碼,發現和我的思路有點不一樣,所以才記錄下這段程式碼。

驗證身份證的出生年月日是否合法(部分程式碼):

    // 判斷出生年月是否有效
	String strYear = idcard.substring(6, 10);// 年份
	String strMonth = idcard.substring(10, 12);// 月份
    String strDay = idcard.substring(12, 14);// 日期
		
	//身份證出生日期無效
	if (isDate(strYear + "-" + strMonth + "-" + strDay) == false) {
		return false;
	}
		
	GregorianCalendar gc = new GregorianCalendar();
	SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
		
	try {
	//身份證生日不在有效範圍
		if ((gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {
			return false;
		}
	} catch (NumberFormatException e) {
		e.printStackTrace();
	} catch (ParseException e) {
		e.printStackTrace();
	}
	//身份證月份無效
	if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {
		return false;
	}
	//身份證日期無效
	if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {
		return false;
	}

isDate()方法:

   /**
	 * 功能:判斷字串出生日期是否符合正則表示式:包括年月日,閏年、平年和每月31天、30天和閏月的28天或者29天
	 * 
	 * @param string
	 * @return
	 */
public static boolean isDate(String strDate) {
	Pattern pattern = Pattern.compile(
				"^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");
	Matcher m = pattern.matcher(strDate);
	if (m.matches()) {
		return true;
	} else {
		return false;
	}
}

計算年齡:

 //截取出生年月日
String birthday = pensonnelIdCard.substring(6, 14);
 //當前日期
String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
//計算年齡差
Integer ageBit = Integer.parseInt(date) - Integer.parseInt(birthday);
//當年齡差的長度大於4位時,即出生年份小於當前年份
if (ageBit.toString().length() > 4) {
//擷取掉後四位即為年齡
Integer personAge = Integer.parseInt(ageBit.toString().substring(0, ageBit.toString().length() - 4));
}else {//當前年份出生,直接賦值為0歲
Integer personAge = 0;
}