java 根据身份证计算年龄(周岁)

您所在的位置:网站首页 身份证号码计算岁数 java 根据身份证计算年龄(周岁)

java 根据身份证计算年龄(周岁)

2024-06-15 07:00| 来源: 网络整理| 查看: 265

最近做的项目需要根据身份证来计算年龄,于是自己写了一段代码,看了网上的一些计算年龄的代码,发现和我的思路有点不一样,所以才记录下这段代码。

验证身份证的出生年月日是否合法(部分代码):

// 判断出生年月是否有效 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; }

附上另一种计算方法:

/** * 根据身份证号计算年龄 * @param pensonnelIdCard * @return */ public Integer getPersonAgeFromIdCard(String pensonnelIdCard) { //截取身份证中出行人出生日期中的年、月、日 Integer personYear = Integer.parseInt(pensonnelIdCard.substring(6, 10)); Integer personMonth = Integer.parseInt(pensonnelIdCard.substring(10, 12)); Integer personDay = Integer.parseInt(pensonnelIdCard.substring(12, 14)); Calendar cal = Calendar.getInstance(); // 得到当前时间的年、月、日 Integer yearNow = cal.get(Calendar.YEAR); Integer monthNow = cal.get(Calendar.MONTH) + 1; Integer dayNow = cal.get(Calendar.DATE); // 用当前年月日减去生日年月日 Integer yearMinus = yearNow - personYear; Integer monthMinus = monthNow - personMonth; Integer dayMinus = dayNow - personDay; Integer age = yearMinus; //先大致赋值 if (yearMinus == 0) { //出生年份为当前年份 age = 0; }else{ //出生年份大于当前年份 if (monthMinus < 0) {//出生月份小于当前月份时,还没满周岁 age = age - 1; } if (monthMinus == 0) {//当前月份为出生月份时,判断日期 if (dayMinus < 0) {//出生日期小于当前月份时,没满周岁 age = age - 1; } } } return age; }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3