主要思路很简单:

1.通过当前年份和用户出生年份相减计算出age :用户当年还没过生的话,age要减一。

2.在身份证截取根据“月日”拼接成开头可以为0的四位数int值。根据当前月日值和用户出生月日对比大小,一步判断age是否要减一。避免了月份判断月份相同等和日期的繁琐判断。

例如用户:2000-12/15 生日  (int)1215>1128,用户 age=22-1=21 

       用户:2000-05/23 生日  (int)0523<1128 , 用户 age=22

以下就是代码实现,身份证截取2000(年)、1215(月日),当前时间转成 yyyy-MMdd 也截取相同的值计算。再加上字符长度合法性校验,以及18位和15位身份证的按条件赋值。

public static int countAge(String idCard) {
        if (idCard.length() != 18 && idCard.length() != 15) {
            throw new IllegalArgumentException("身份证号长度错误");
        }
        String year;
        String monthDay;
        if (idCard.length() == 18) {
            year = idCard.substring(6,10);
            monthDay = idCard.substring(10,14);
        } else {
            year = "19" + idCard.substring(6, 8);
            monthDay = idCard.substring(8, 12);
        }
        //获取当前时间字符串如:2022-1128
        String nowTimeStr = new SimpleDateFormat("yyyy-MMdd").format(new Date());
        String yearNow = nowTimeStr.substring(0, 4);// 当前年份
        String monthDayNow = nowTimeStr.substring(5, 9);// 当前月日
        int age = Integer.parseInt(yearNow) - Integer.parseInt(year);
        //age减一的情况 :用户月日大于当前月日(开头可以为0的4位数int)
        if (Integer.parseInt(monthDay) > Integer.parseInt(monthDayNow)) {
            age = age - 1;
        }
        return age;
    }

参考博客:Java 身份证号 计算年龄、性别_陈賝的博客-CSDN博客_java根据身份证号计算年龄

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐