Java根据身份证号码提取出该人的出生日期

编写一个方法,该方法接受一个身份证号码作为参数,从身份证号码中提取出该人的出生日期,计算该人到2019/06/30时点为止(包含改点)的周岁年龄,并将计算出的年龄作为方法的返回值。
注意:要求对接受的身份证号码的格式(文字类型,文字个数)进行合法性检查

Hutool参考文档 Hutool,Java工具集 https://www.hutool.cn/docs/#/core/%E5%B7%A5%E5%85%B7%E7%B1%BB/%E8%BA%AB%E4%BB%BD%E8%AF%81%E5%B7%A5%E5%85%B7-IdcardUtil

java身份证号码正则表达式校验(亲测可用) Java正则校验手机号_易的博客-CSDN博客_java身份证正则表达式 // 原文:https://blog.csdn.net/u011106915/article/details/76066985public class IDUtils { public static boolean isIDNumber(String IDNumber) { if (IDNumber == null || "".equals(IDNumber)) { return false; } // 定义判别用户身份证号的... https://blog.csdn.net/qq_27327261/article/details/108510833


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;
    }

}