每日一练编程题:键盘输入身份证号,判断此人是出生年月日以及性别,是否成年【Scanner、String、Character、Integer、Calendar 的使用】

设计程序

  • 要求:
    1、键盘输入身份证号(不包含字母)
    2、判断此人是出生年月日
    3、此人男女(最后一位是奇数男,偶数女)
    4、是否成年

解析:

  • 键盘录入

Scanner sc = new Scanner(System.in);
String idCard = sc.nextLine();

  • 校验身份证号格式

先判断长度
判断格式,就需要一个字符一个字符判断,那么就要遍历,通过String 中的 charAt( int i ) 拿出字符,再通过 Character 的 isLetter(char ch)方法判断是否是字母
在这里插入图片描述
在这里插入图片描述

  • 根据身份证号特性,截取其中年月日

身份证输入的是字符串,且14位,使用String类的substring()方法截取出生日期
在这里插入图片描述

  • 判断男女:根据下标或者截取获得最后一位

跟上面方法一样

  • 判断是否成年

方法一:
通过if-else 判断语句
首先年份是否够,如果今年18岁,那再考虑月份,如果当月生日,最后考虑天数
方法二:
通过调用Calendar日期类的方法判断

参考代码

package day530.homework;

import java.util.Calendar;
import java.util.Scanner;

/**
 * 键盘输入身份证号,
 * 判断此人是出生年月日,
 * 此人男女(最后一位是奇数男,偶数女),
 * 是否成年
 *---------------------
 * 要求身份证号18位,且全是数字
 * 1) 键盘录入
 * 2) 根据身份证号特性,截取其中年月日
 * 3) 根据下标或者截取获得最后一位
 * 4) 首先年份是否够,如果今年18岁,那再考虑月份,如果当月生日,最后考虑天数
 */
public class HomeworkOne {
    public static void main(String[] args) {
        System.out.println("请输入身份证号:");
        /*
        - int a = scanner.nextInt() 允许输入整型
        - double d = scanner.nextDouble() 允许输入小数
        - String s = scanner.nextLine() 允许输入字符串
         */
        Scanner sc = new Scanner(System.in);
        String idCard = sc.nextLine();
        if (checkidCard(idCard)) {
            String sex = getSex(idCard);
            String brithDate = getBirthDate(idCard);
            System.out.println("性别:"+sex+ "出生日期:"+brithDate);
            System.out.println(isAdult(idCard));
            //通过调用Calendar日期类的方法判断
         // System.out.println(isAdultByCalendar(idCard));
        }

    }
    /**
     * @descriptions 传入身份证号码,获得出生年份
     * @author LiCoffee
     * @date 2024/5/31 19:38
     * @param idCard - 身份证号码
     * @return  -出生年份字符串
     **/
    public static String getBirthYear(String idCard){
        return idCard.substring(6,10);
    }
    /**
     * @descriptions 传入身份证号码,获得出生月份
     * @author LiCoffee
     * @date 2024/5/31 19:38
     * @param idCard - 身份证号码
     * @return  -出生月份字符串
     **/
    public static String getBirthMonth(String idCard){
        return idCard.substring(10,12);
    }
    /**
     * @descriptions 传入身份证号码,获得出生天
     * @author LiCoffee
     * @date 2024/5/31 19:38
     * @param idCard - 身份证号码
     * @return  -出生天字符串
     **/
    public static String getBirthDay(String idCard){
        return idCard.substring(12,14);
    }
    /**
     * @descriptions 传入身份证号码,获得出生日期
     * @author LiCoffee
     * @date 2024/5/31 19:38
     * @param idCard - 身份证号码
     * @return brithday -出生日期字符串
     **/
    public static String getBirthDate(String idCard){
        String brithdate = getBirthYear(idCard)+"年"+getBirthMonth(idCard)+"月"+getBirthDay(idCard)+"日";
        return brithdate;
    }
    /**
     * @descriptions 传入身份证号码,获得性别
     * @author LiCoffee
     * @date 2024/5/31 19:38
     * @param idCard - 身份证号码
     * @return  -性别
     **/
    public static String getSex(String idCard){
        int endNum = Integer.parseInt(idCard.substring(14));
        if (endNum % 2 == 0) {
            return "女" ;
        }
        return "男" ;
    }
    /**
     * 校验身份证号格式
     */
    public static boolean checkidCard(String idCard){
        if (idCard.length() == 18) {//判断长度
            boolean isOK = true;
            //两种方法遍历
//            char[] chars = idCard.toCharArray();
//            for (int i = 0; i < chars.length; i++) {
//                if (Character.isLetter(chars[i])) {
//
//                }
//            }
            for (int i = 0; i < idCard.length(); i++) {
                if (Character.isLetter(idCard.charAt(i))) {
                    isOK = false;
                    break;
                }
            }
            if (isOK) {
                return isOK;
            }else {
                System.out.println("输入身份证号格式错误!!(包含字母)");
            }
        }else {
            System.out.println("输入身份证号格式错误!!");
        }
        return false;
    }
    /*
    判断是否成年
     */
    public static String isAdult(String idCard){
        Calendar calendar = Calendar.getInstance( );
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH)+1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        if((year - Integer.parseInt(getBirthYear(idCard))) > 18){
            return "已成年";
        }else if (( year - Integer.parseInt(getBirthYear(idCard))) ==18 && month >= Integer.parseInt(getBirthMonth(idCard)) ) {
            if (day >= Integer.parseInt(getBirthDay(idCard))) {
                return "已成年";
            } else {
                return "未成年";
            }
        }else {
            return "未成年";
        }
    }
     /*
    通过Calendar类判断是否成年
     */
    public static String isAdultByCalendar(String idCard){

        Calendar nowCalendar = Calendar.getInstance();
        nowCalendar.add(Calendar.YEAR,-18);//当前年份后退18年
        Calendar birthCalendar = Calendar.getInstance();
 		 //设置出生日期
        birthCalendar.set(Integer.parseInt(getBirthYear(idCard)),Integer.parseInt(getBirthMonth(idCard))-1,Integer.parseInt(getBirthDay(idCard)));
       //通过after()和equals()进行判断
        if(nowCalendar.after(birthCalendar) || nowCalendar.equals(birthCalendar)) {
            return "已成年";
        }
        return "未成年";
    }
}


最后

编写不易,如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值