未成年年龄校验工具类

private static final int invalidAge = -1;

/**
 *根据身份证号码计算年龄
 * @param idNumber 考虑到了15位身份证,但不一定存在
 */
public static int getAgeByIDNumber(String idNumber) {
    String dateStr;
    if (idNumber.length() == 15) {
        dateStr = "19" + idNumber.substring(6, 12);
    } else if (idNumber.length() == 18) {
        dateStr = idNumber.substring(6, 14);
    } else {
        return invalidAge;
    }

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
    try {
        Date birthday = simpleDateFormat.parse(dateStr);
        return getAgeByDate(birthday);
    } catch (ParseException e) {
        return invalidAge;
    }

}

/**
 *根据生日计算年龄
 * @param dateStr 这样格式的生日 1990-01-01
 */
public static int getAgeByDateString(String dateStr) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
    try {
        Date birthday = simpleDateFormat.parse(dateStr);
        return getAgeByDate(birthday);
    } catch (ParseException e) {
        return invalidAge;
    }
}

public static int getAgeByDate(Date birthday) {
    Calendar calendar = Calendar.getInstance();
    if (calendar.getTimeInMillis() - birthday.getTime() < 0L) {
        return invalidAge;
    }
    int yearNow = calendar.get(Calendar.YEAR);
    int monthNow = calendar.get(Calendar.MONTH) + 1;
    int dayOfMonthNow = calendar.get(Calendar.DAY_OF_MONTH);
    calendar.setTime(birthday);

    int yearBirthday = calendar.get(Calendar.YEAR);
    int monthBirthday = calendar.get(Calendar.MONTH);
    int dayOfMonthBirthday = calendar.get(Calendar.DAY_OF_MONTH);
    int age = yearNow - yearBirthday;
    if (monthNow <= monthBirthday && monthNow == monthBirthday && dayOfMonthNow < dayOfMonthBirthday || monthNow < monthBirthday) {
        age--;
    }
    return age;
}

public static boolean vaildMinors(String idNumber,String isCheck){
    if (StringUtil.compare("true",isCheck)){
        int ageByIDNumber = getAgeByIDNumber(idNumber);
        if(0 <= ageByIDNumber && 14 > ageByIDNumber || -1 == ageByIDNumber){
            //未成年,返回核验拒绝结果
            return false;
        }
    }
    return true;
}

public static void main(String[] args) {
    boolean aTrue = vaildMinors("370214200802274038", "true");
    System.out.println(aTrue);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值