java 跟据身份证识别性别年龄
package com.bdzk.sys.config.utils;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 跟据身份证识别性别年龄
* @author mujinlong
* @email 885394406@qq.com
* @微信 GTBB878
* @since 2023-02-17 15:59:36
*/
public class CertificateUtils {
/**
* @author mujinlong
* 根据身份证计算性别
* @param idNumber 身份证号码
* @return 识别为女性 返回1 识别为男性返回2
* @throws IllegalArgumentException
*/
public static Integer judgeGender(String idNumber) throws IllegalArgumentException {
if (idNumber.length() != 18 && idNumber.length() != 15) {
return 0;
}
int gender = 0;
if (idNumber.length() == 18) {
//如果身份证号18位,取身份证号倒数第二位
char c = idNumber.charAt(idNumber.length() - 2);
gender = Integer.parseInt(String.valueOf(c));
} else {
//如果身份证号15位,取身份证号最后一位
char c = idNumber.charAt(idNumber.length() - 1);
gender = Integer.parseInt(String.valueOf(c));
}
if (gender % 2 == 1) {
//识别为男
return 2;
} else {
//识别为女性
return 1;
}
}
/**
* @author mujinlong
* 根据身份证计算年龄
* @param idNumber 身份证号码
* @return 年龄
*/
public static Integer getAgeFromIdcard(String idNumber){
if (idNumber.length() != 18 && idNumber.length() != 15) {
throw new IllegalArgumentException("身份证号长度错误");
}
String year;
String monthDay;
if (idNumber.length() == 18) {
year = idNumber.substring(6,10);
monthDay = idNumber.substring(10,14);
} else {
year = "19" + idNumber.substring(6, 8);
monthDay = idNumber.substring(8, 12);
}
//获取当前时间字符串如:2022-1128
String nowTimeStr = new SimpleDateFormat("yyyy-MMdd").format(new Date());
String yearNow = nowTimeStr.substring(0, 4);// 当前年份
String monthDayNow = nowTimeStr.substring(5, 9);// 当前月日
int age = Integer.parseInt(yearNow) - Integer.parseInt(year);
//age减一的情况 :用户月日大于当前月日(开头可以为0的4位数int)
if (Integer.parseInt(monthDay) > Integer.parseInt(monthDayNow)) {
age = age - 1;
}
return age;
}
}