设计程序
- 要求:
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 "未成年";
}
}
最后
编写不易,如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍