根據身份證計算年齡(週歲)
阿新 • • 發佈:2018-12-15
最近做的專案需要根據身份證來計算年齡,於是自己寫了一段程式碼,看了網上的一些計算年齡的程式碼,發現和我的思路有點不一樣,所以才記錄下這段程式碼。
驗證身份證的出生年月日是否合法(部分程式碼):
// 判斷出生年月是否有效 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; }