private static final int invalidAge = -1; /** *根据身份证号码计算年龄 * @param idNumber 考虑到了15位身份证,但不一定存在 */ public static int getAgeByIDNumber(String idNumber) { String dateStr; if (idNumber.length() == 15) { dateStr = "19" + idNumber.substring(6, 12); } else if (idNumber.length() == 18) { dateStr = idNumber.substring(6, 14); } else { return invalidAge; } SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); try { Date birthday = simpleDateFormat.parse(dateStr); return getAgeByDate(birthday); } catch (ParseException e) { return invalidAge; } } /** *根据生日计算年龄 * @param dateStr 这样格式的生日 1990-01-01 */ public static int getAgeByDateString(String dateStr) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); try { Date birthday = simpleDateFormat.parse(dateStr); return getAgeByDate(birthday); } catch (ParseException e) { return invalidAge; } } public static int getAgeByDate(Date birthday) { Calendar calendar = Calendar.getInstance(); if (calendar.getTimeInMillis() - birthday.getTime() < 0L) { return invalidAge; } int yearNow = calendar.get(Calendar.YEAR); int monthNow = calendar.get(Calendar.MONTH) + 1; int dayOfMonthNow = calendar.get(Calendar.DAY_OF_MONTH); calendar.setTime(birthday); int yearBirthday = calendar.get(Calendar.YEAR); int monthBirthday = calendar.get(Calendar.MONTH); int dayOfMonthBirthday = calendar.get(Calendar.DAY_OF_MONTH); int age = yearNow - yearBirthday; if (monthNow <= monthBirthday && monthNow == monthBirthday && dayOfMonthNow < dayOfMonthBirthday || monthNow < monthBirthday) { age--; } return age; } public static boolean vaildMinors(String idNumber,String isCheck){ if (StringUtil.compare("true",isCheck)){ int ageByIDNumber = getAgeByIDNumber(idNumber); if(0 <= ageByIDNumber && 14 > ageByIDNumber || -1 == ageByIDNumber){ //未成年,返回核验拒绝结果 return false; } } return true; } public static void main(String[] args) { boolean aTrue = vaildMinors("370214200802274038", "true"); System.out.println(aTrue); }
04-19
197
06-07
5283
01-09
3094
06-29
11-01
530