身份证号工具类

public class IDCardUtil{
/**
* 15位身份证号
/
private static final Integer FIFTEEN_ID_CARD=15;
/
*
* 18位身份证号
*/
private static final Integer EIGHTEEN_ID_CARD=18;
private static SimpleDateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);

/**
 * 根据身份证号获取性别
 * @param IDCard
 * @return
 */
public static String getSex(String IDCard){
    String sex ="";
    if (StringUtils.isNotBlank(IDCard)){
        //15位身份证号
        if (IDCard.length() == FIFTEEN_ID_CARD){
            if (Integer.parseInt(IDCard.substring(14, 15)) % 2 == 0) {
                sex = "女";
            } else {
                sex = "男";
            }
            //18位身份证号
        }else if(IDCard.length() == EIGHTEEN_ID_CARD){
            // 判断性别
            if (Integer.parseInt(IDCard.substring(16).substring(0, 1)) % 2 == 0) {
                sex = "女";
            } else {
                sex = "男";
            }
        }
    }
    return sex;
}

/**
 * 根据身份证号获取年龄
 * @param IDCard
 * @return
 */
public static Integer getAge(String IDCard){
    Integer age = 0;
    Date date = new Date();
    if (StringUtils.isNotBlank(IDCard)&& isValid(IDCard)){
        //15位身份证号
        if (IDCard.length() == FIFTEEN_ID_CARD){
            // 身份证上的年份(15位身份证为1980年前的)
            String uyear = "19" + IDCard.substring(6, 8);
            // 身份证上的月份
            String uyue = IDCard.substring(8, 10);
            // 当前年份
            String fyear = format.format(date).substring(0, 4);
            // 当前月份
            String fyue = format.format(date).substring(5, 7);
            if (Integer.parseInt(uyue) <= Integer.parseInt(fyue)) {
                age = Integer.parseInt(fyear) - Integer.parseInt(uyear) + 1;
                // 当前用户还没过生
            } else {
                age = Integer.parseInt(fyear) - Integer.parseInt(uyear);
            }
            //18位身份证号
        }else if(IDCard.length() == EIGHTEEN_ID_CARD){
            // 身份证上的年份
            String year = IDCard.substring(6).substring(0, 4);
            // 身份证上的月份
            String yue = IDCard.substring(10).substring(0, 2);
            // 当前年份
            String fyear = format.format(date).substring(0, 4);
            // 当前月份
            String fyue = format.format(date).substring(5, 7);
            // 当前月份大于用户出身的月份表示已过生日
            if (Integer.parseInt(yue) <= Integer.parseInt(fyue)) {
                age = Integer.parseInt(fyear) - Integer.parseInt(year) + 1;
                // 当前用户还没过生日
            } else {
                age = Integer.parseInt(fyear) - Integer.parseInt(year);
            }
        }
    }
    return age;
}

/**
 * 获取出生日期  yyyy年MM月dd日
 * @param IDCard
 * @return
 */
public static String getBirthday(String IDCard){
    String birthday="";
    String year="";
    String month="";
    String day="";
    if (StringUtils.isNotBlank(IDCard)){
        //15位身份证号
        if (IDCard.length() == FIFTEEN_ID_CARD){
            // 身份证上的年份(15位身份证为1980年前的)
            year = "19" + IDCard.substring(6, 8);
            //身份证上的月份
            month = IDCard.substring(8, 10);
            //身份证上的日期
            day= IDCard.substring(10, 12);
            //18位身份证号
        }else if(IDCard.length() == EIGHTEEN_ID_CARD){
            // 身份证上的年份
            year = IDCard.substring(6).substring(0, 4);
            // 身份证上的月份
            month = IDCard.substring(10).substring(0, 2);
            //身份证上的日期
            day=IDCard.substring(12).substring(0,2);
        }
        birthday=year+"年"+month+"月"+day+"日";
    }
    return birthday;
}

/**
 * 身份证验证
 * @param id 号码内容
 * @return 是否有效
 */
public static boolean isValid(String id){
    Boolean validResult = true;
    //校验长度只能为15或18
    int len = id.length();
    if (len != FIFTEEN_ID_CARD && len != EIGHTEEN_ID_CARD){
        validResult = false;
    }
    //校验生日
    if (!validDate(id)){
        validResult = false;
    }
    return validResult;
}

/**
 * 校验生日
 * @param id
 * @return
 */
private static boolean validDate(String id)
{
    try
    {
        String birth = id.length() == 15 ? "19" + id.substring(6, 12) : id.substring(6, 14);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        Date birthDate = sdf.parse(birth);
        if (!birth.equals(sdf.format(birthDate))){
            return false;
        }
    }
    catch (ParseException e)
    {
        return false;
    }
    return true;
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值