Android 中判断年龄是否在16岁以下(含16岁)及其方法的封装使用

项目中有个需求:根据身份证号判断做社保卡申领的人是否是16岁以下(含16岁)的未成年人,是的话,需要父母陪伴

我的实现思路:
就是通过身份证号码先判断出这个人是多少岁,然后在跟当前时间做对比,重要的一点是临界时间的判断,也就是刚好是16的差值,那就需要再通过判断月份和日期来做判断,是否符合条件
为了通用,我把方法封装了一下,可以输入年龄,然后判断是否是在多少岁年龄一下,还可以设置是否包含当前年龄
核心代码如下:
1、获取真实的年龄
   /**
     * 获取真实的年龄
     *
     * @param idNum
     * @return
     */
    public static int getRealYear(String idNum) {

        Calendar cal = Calendar.getInstance();
        //当前年
        int currentYear = cal.get(Calendar.YEAR);
        //当前月
        int currentMonth = (cal.get(Calendar.MONTH)) + 1;
        //当前月的第几天:即当前日
        int currentDay = cal.get(Calendar.DAY_OF_MONTH);


        int birthYear = 0;
        int birthMonth = 0;
        int birthDay = 0;
        int realYear = 0;

        if (!TextUtils.isEmpty(idNum)) {
            String birthDate = idNum.substring(6, 14);

            if (!TextUtils.isEmpty(birthDate) && birthDate.length() == 8) {
                birthYear = Integer.valueOf(birthDate.substring(0, 4));
                birthMonth = Integer.valueOf(birthDate.substring(4, 6));
                birthDay = Integer.valueOf(birthDate.substring(6, 8));
            }

            realYear = currentYear - birthYear;

            if (birthMonth > currentMonth) {
                realYear = realYear - 1;
            } else if (birthMonth == currentMonth) {
                if (birthDay > currentDay) {
                    realYear = realYear - 1;
                } else {
                    realYear = realYear;
                }
            } else {
                realYear = realYear;
            }
        }

        return realYear;
    }

2、判断是否小于或者等于当前项目中规定的年龄

    /**
     * 判断是否小于或者等于当前age的年龄
     *
     * @param age
     * @return
     */
    public static boolean isChildUnderTargetAge(String idNum, int age, boolean isIncludeAge) {
        int realYear = getRealYear(idNum);
        if (isIncludeAge) {
            if (realYear <= age) {
                return true;
            } else {
                return false;
            }
        } else {
            if (realYear < age) {
                return true;
            } else {
                return false;
            }
        }

    }
3、符合16岁以下(含16岁)

    /**
     * 判断是否  是  > 2002年出生的     就是符合16岁以下(含16岁)
     *
     * @param birthDay
     * @return
     */
    public static boolean isChildUnder16(String birthDay) {
        return isChildUnderTargetAge(birthDay, 16, true);
    }
4、代码中调用
 boolean isChildUnder16 = IdcardUtils.isChildUnder16(mBean.sfzh);
    原文作者:追梦小乐
    原文地址: https://www.jianshu.com/p/3ccb6acddd69
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞