编写一个方法,该方法接受一个身份证号码作为参数,从身份证号码中提取出该人的出生日期,计算该人到2019/06/30时点为止(包含改点)的周岁年龄,并将计算出的年龄作为方法的返回值。
注意:要求对接受的身份证号码的格式(文字类型,文字个数)进行合法性检查
import java.util.Locale;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 编写一个方法,该方法接受一个身份证号码作为参数,从身份证号码中提取出该人的出生日期
* 计算该人到2019/06/30时点为止(包含该点)的周岁年龄,并将计算出的年龄作为方法的返回值。
* 注意:要求对接受的身份证号码的格式(文字类型,文字个数)进行合法性检查
*/
public class App {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String codeString = scanner.next();
if (18 != codeString.length() || !isNumericzidai(codeString)) {
System.out.println("输入有误");
scanner.close();
return;
}
int year = Integer.parseInt(codeString.substring(6, 10));
int month = Integer.parseInt(codeString.substring(10, 12));
int day = Integer.parseInt(codeString.substring(12, 14));
System.out.println(String.format(Locale.getDefault(), "出生于%d年%d月%d日", year, month, day));
System.out.println(String.format(Locale.getDefault(), "到指定日期时候的年龄为%d岁", getAge(year, month, day)));
scanner.close();
}
/**
* 计算年龄
*
* @param year
* @param month
* @param day
* @return
*/
private static int getAge(int year, int month, int day) {
int age = 2019 - year - 1;
if (month < 6) {
age++;
} else if (month == 6) {
if (day >= 30) {
age++;
}
} else {
age--;
}
return age;
}
/**
* 判断是不是纯数字
*
* @param str
* @return
*/
public static boolean isNumericzidai(String str) {
Pattern pattern = Pattern.compile("-?[0-9]+\\.?[0-9]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
}