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);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们到底是为了生活而工作,还是为了工作而生活? 当你为了将来而省略了生活中应有的享受时,你的生活就打了九折; 如果...
    人杰智慧阅读 408评论 0 0
  • ​京东需要更好布局以制衡阿里,沃尔玛需要解决线上线下两张皮,于是一拍即合。 文│张兴军 6月20日晚间,京东集团发...
    KSZxMX阅读 302评论 0 1
  • 你们当日所夸的福气在哪里呢? 《加拉太书》4章15节 是啊!我出了什么问题,把上帝赐我的上好的福气弄去哪里了呢? ...
    溪水边的小羊阅读 225评论 0 0
  • 立春,农历二十四节气中的第一个节气。 “立”是“开始”的意思,自秦代以来,中国就一直以立春作为孟春时节的开始。所谓...
    爱弥阅读 450评论 0 7
  • 参考博客: http://www.jb51.net/article/31721.htm httpd.conf ht...
    其实我很dou阅读 1,272评论 0 0