根据身份证判断年龄、判断性别等

一、根据身份证号获取年龄、判断性别

 

工具方法:

       /**
     * 根据身份证号(18位和15位通用)计算年龄——默认与当前系统时间对比
     * @param idCard 身份证号
     * @return
     */
    public static Integer getPersonAgeFromIdCard1(String idCard) {
        Integer age = 0;

        //若身份证是15位则需要转换
        if(idCard.length() == 15){
            StringBuilder s = new StringBuilder();
            s.append(idCard.substring(0,6)).append("19").append(idCard.substring(6));
            idCard = s.toString();
        }

        try {
            //截取身份证中出行人出生日期中的年、月、日
            Integer personYear = Integer.parseInt(idCard.substring(6, 10));
            Integer personMonth = Integer.parseInt(idCard.substring(10, 12));
            Integer personDay = Integer.parseInt(idCard.substring(12, 14));

            Calendar cal = Calendar.getInstance();
            // 得到当前时间的年、月、日
            Integer yearNow = cal.get(Calendar.YEAR);
            Integer monthNow = cal.get(Calendar.MONTH) + 1;
            Integer dayNow = cal.get(Calendar.DATE);

            // 用当前年月日减去生日年月日
            Integer yearMinus = yearNow - personYear;
            Integer monthMinus = monthNow - personMonth;
            Integer dayMinus = dayNow - personDay;

            age = yearMinus; //先大致赋值

            if (yearMinus == 0) { //出生年份为当前年份
                age = 0;
            }else{ //出生年份大于当前年份
                if (monthMinus < 0) {//出生月份小于当前月份时,还没满周岁
                    age = age - 1;
                }
                if (monthMinus == 0) {//当前月份为出生月份时,判断日期
                    if (dayMinus < 0) {//出生日期小于当前月份时,没满周岁
                        age = age - 1;
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("身份证信息有误:" + idCard);
        }finally {
            return age;
        }
    }

    /**
     * 根据身份证号(18位和15位通用)计算年龄——通过与指定时间对比
     * @param idCard 身份证号
     * @param date 指定的时间
     * @return
     */
    public static Integer getPersonAgeFromIdCard2(String idCard, Date date) {
        Integer age = 0;

        try {

            //若身份证是15位则需要转换
            if(idCard.length() == 15){
                StringBuilder s = new StringBuilder();
                s.append(idCard.substring(0,6)).append("19").append(idCard.substring(6));
                idCard = s.toString();
            }

            //截取身份证中出行人出生日期中的年、月、日
            Integer personYear = Integer.parseInt(idCard.substring(6, 10));
            Integer personMonth = Integer.parseInt(idCard.substring(10, 12));
            Integer personDay = Integer.parseInt(idCard.substring(12, 14));

            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            // 得到当前时间的年、月、日
            Integer yearNow = cal.get(Calendar.YEAR);
            Integer monthNow = cal.get(Calendar.MONTH) + 1;
            Integer dayNow = cal.get(Calendar.DATE);

            // 用当前年月日减去生日年月日
            Integer yearMinus = yearNow - personYear;
            Integer monthMinus = monthNow - personMonth;
            Integer dayMinus = dayNow - personDay;

            age = yearMinus; //先大致赋值

            if (yearMinus == 0) { //出生年份为当前年份
                age = 0;
            }else{ //出生年份大于当前年份
                if (monthMinus < 0) {//出生月份小于当前月份时,还没满周岁
                    age = age - 1;
                }
                if (monthMinus == 0) {//当前月份为出生月份时,判断日期
                    if (dayMinus < 0) {//出生日期小于当前月份时,没满周岁
                        age = age - 1;
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("身份证信息有误:" + idCard);
        }finally {
            return age;
        }
    }

    /**
     * 判断身份证号是否由“0,1,2,3,4,5,6,7,8,9,X”组成
     * @param idCard 身份证号
     * @return
     */
    public static boolean judgeIdCard(String idCard){

        Integer len = idCard.length();
        char[] c = idCard.toCharArray();

        if ( len != 15 && len != 18){
            System.out.println("身份证应该是15位或者18位");
            return false;
        }
        for(int i = 0 ; i < c.length ; i++){

            if(c[i] < '0' || c[i] > '9'){
                if((i + 1) == 18 && c[i] == 'X'){
                    continue;
                }else{
                    return false;
                }
            }
        }
        return true;
    }

    /**
     * 根据身份证号(18位和15位通用)获取性别
     * @param idCard 身份证号
     * @return
     */
    public static String getGenderByIdCard(String idCard){

        Integer genderInt ;

        if(idCard.length() == 18){
            //如果身份证号18位,取身份证号倒数第二位
            char c = idCard.charAt(idCard.length() - 2);
            genderInt = Integer.parseInt(String.valueOf(c));
        }else{
            //如果身份证号15位,取身份证号最后一位
            char c = idCard.charAt(idCard.length() - 1);
            genderInt = Integer.parseInt(String.valueOf(c));
        }

        if(genderInt % 2 == 1){
            //余数为1(即奇数),则伟男性
            return "男";
        }else{
            //余数为0(即偶数),则为女性
            return "女";
        }
    }

main方法:

    public static void main(String[] args) throws ParseException {

        System.out.println("***************18位身份证*******************");
        //根据身份证号计算年龄——默认与当前系统时间对比
        String idCard1 = "11010119730307383X";
        Integer age1_1 = getPersonAgeFromIdCard1(idCard1);

        System.out.println("根据18位身份证号("+ idCard1 +")计算年龄——默认与当前系统时间对比:" + age1_1);

        //根据身份证号计算年龄——通过与指定时间对比
        Date date=  new SimpleDateFormat("yyyy-MM-dd").parse("2000-02-12");
        Integer age1_2 = getPersonAgeFromIdCard2(idCard1, date);

        System.out.println("根据18位身份证号("+ idCard1 +")计算年龄——默认与指定时间(2000-02-12)对比:" + age1_2);

        System.out.println("根据18位身份证号("+ idCard1 +")判断性别——性别为:" + getGenderByIdCard(idCard1));

        System.out.println("***************15位身份证*******************");
        //根据身份证号计算年龄——默认与当前系统时间对比
        String idCard2 = "320311770706002";
        Integer age2_1 = getPersonAgeFromIdCard1(idCard2);

        System.out.println("根据15位身份证号("+ idCard2 +")计算年龄——默认与当前系统时间对比:" + age2_1);

        //根据身份证号计算年龄——通过与指定时间对比
        Integer age2_2 = getPersonAgeFromIdCard2(idCard2, date);

        System.out.println("根据15位身份证号("+ idCard2 +")计算年龄——默认与指定时间(2000-02-12)对比:" + age2_2);

        System.out.println("根据15位身份证号("+ idCard2 +")判断性别——性别为:" + getGenderByIdCard(idCard2));
    }

运行结果:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值