根据身份证号判断是否成年

根据身份证号判断是否成年

1.1取出年月日和当前年月日进行比较

  • 截取身份证相应的年,月,日(以下用生日年,生日月,生日天代替)
  • 获取当前时间的年,月,日(以下用当前年,当前月,当前天代替)
  • 如果当前年减去生日年 大于18 可以说明已经成年
  • 如果当前年减去生日年 小于18 也可以说明未成年
  • 如果当前年减去生日年 等于18,则需要判断生日是否已经过去
  • 先判断生日月是否过去
  • 如果当前月减去生日月 大于 0 可以说明已经成年
  • 如果当前月减去生日月 小于 0 也可以说明未成年
  • 如果当前月减去生日月 等于 0 则需要再判断生日天是否过去
    • 如果当前天减去生日天 大于 0 可以说明已经成年
    • 如果当前天减去生日天 小于 0 也可以说明未成年
    public static void isAdultInId(String str){
        /**
         * 截取年,月,日
         * 因为字符串的下标是从0开始的,并且String substring(int beginIndex,int endIndex)右边下标是不包含的,
         * 所以开始下标为起始位数-1,结束下标是截取位置下标 + 1
         */
        //截取出生年份
        int birthdayYear = Integer.parseInt(str.substring(6,10));
        //获取当前时间
        Calendar calendar = Calendar.getInstance();
        //获取当前年份
        int currentYear = calendar.get(Calendar.YEAR);
        /**
         * 然后判断年 -> 月 -> 日
         */
        //先判断特殊情况,当年份相差刚好为18时
        if(currentYear - birthdayYear == 18){
            /**
             * 然后获取月份,判断生日月份是否已经过去
             */
            //截取出生月份
            int birthdayMonth = Integer.parseInt(str.substring(10,12));
            //获取当前月份
            int currentMonth = calendar.get(Calendar.MONTH) + 1; //因为java中月份是从0开始的,0代表一月,所以获取到的月份需要 + 1;
            //先判断特殊情况,刚好当前月份为生日月
            if(currentMonth - birthdayMonth == 0){
                /**
                 * 最后获取月份,判断生日天是否已经过去
                 */
                //截取出生日
                int birthdayDay = Integer.parseInt(str.substring(12,14));
                //获取当前日
                int currentDay = calendar.get(Calendar.DAY_OF_MONTH);
                //如果生日天已经过去或者刚好为今天,就可以说明已经成年
                //反之,则还未成年
                if(currentDay - birthdayDay >= 0){
                    System.out.println("已经成年");
                }else{
                    System.out.println("还未成年");
                }
            }else if(currentMonth - birthdayMonth > 0){
                //生日月已经过去,已经成年
                System.out.println("已经成年");
            }else{
                //反之,生日月还没有过去,还未成年
                System.out.println("还未成年");
            }
        }else if(currentYear - birthdayYear > 18){
            //年份相差,大于18,已经成年
            System.out.println("已经成年");
        }else{
            //年份相差,小于18,还未成年
            System.out.println("还未成年");
        }
    }

1.2取出年月日和当前年月日进行比较

  • 直接使用当前年月日和出生年月日相减,大于等于180000,就是成年
  • 例出生年月日为:20051025,当前年月日为 20231025 相减为180000,刚好成年
  • 出生年月日为:20051026,当前年月日为 20231025 相减为179999,不会大于18000,就还未成年
public  static void isAdultInId(String str){
        /**
         * 截取年,月,日
         * 因为字符串的下标是从0开始的,并且String substring(int beginIndex,int endIndex)右边下标是不包含的,
         * 所以开始下标为起始位数-1,结束下标是截取位置下标 + 1
         */
        //截取出生年月日
        int birthdayYearkMonthDay = Integer.parseInt(str.substring(6,14));
        //获取当前年月日
        //当前日期模板
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        //获取当前时间,并当前时间按照模板进行格式化,转化为字符串
        String currentYearMonthDayStr = sdf.format(new Date());
        //字符串转化为整数
        int currentYearMonthDay = Integer.parseInt(sdf.format(new Date()));
        //判断两者相差是不是大于等于180000
        if(currentYearMonthDay - birthdayYearkMonthDay >= 180000){
            //大于等于180000,已经成年
            System.out.println("已经成年");
        }else{
            //反之,还未成年
            System.out.println("还未成年");
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值