根据身份证号获取出生日期,年龄,性别

2023-11-17

java语言,根据身份证号获取出生日期,年龄,性别

// 测试程序
public class TestUtils {
    public static void main(String[] args) {
        String idcard = "xxxxxxxxxxxxxxxxxx";// 不方便透露的身份证号码
        String birthday = IDCardUtils.getBirthday(idcard);
        int age = IDCardUtils.getAge(idcard);
        String sex = IDCardUtils.getSex(idcard);

        System.out.println("出生日期: " + birthday);
        System.out.println("年龄: " + age);
        System.out.println("性别: " + sex);

        // 出生日期: 2002-08-08
        // 年龄: 18
        // 性别: 男
    }
}
import java.util.Calendar;

/*======================== 用法介绍 ========================
========================== 用法介绍 ========================
========================== 用法介绍 ========================

    String idcard = "xxxxxxxxxxxxxxxxxx";
    String birthday = IDCardUtils.getBirthday(idcard);
    int age = IDCardUtils.getAge(idcard);
    String sex = IDCardUtils.getSex(idcard);

========================== 用法介绍 ========================
========================== 用法介绍 ========================
========================== 用法介绍 ======================*/

/**
 * 身份证工具类
 */
public class IDCardUtils {

    /**
     * 获取出生日期
     * @param idCard 身份证号码
     * @return 出生日期,格式: 1999-09-09
     */
    public static String getBirthday(String idCard) {
        // 身份证号码:
        // 15位:6位地址码+6位出生年月日(900101代表1990年1月1日出生)+3位顺序码
        // 18位:6位地址码+8位出生年月日(19900101代表1990年1月1日出生)+3位顺序码+1位校验码

        // 地区码:
        // 1.第一、二位表示省(自治区、直辖市、特别行政区)。
        // 2.第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码)。其中,01-20,51-70表示省直辖市;21-50表示地区(自治州、盟)。
        // 3.第五、六位表示县(市辖区、县级市、旗)。01-18表示市辖区或地区(自治州、盟)辖县级市;21-80表示县(旗);81-99表示省直辖县级市。

        // 顺序码:顺序码奇数分给男性,偶数分给女性。

        // 校验码:
        // 作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,
        // 因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且中国的计算机应用系统也不承认19位的身份证号码。
        // Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

        String birthday = "";
        int year = Calendar.getInstance().get(Calendar.YEAR);
        char[] number = idCard.toCharArray();
        boolean flag = true;
        if (number.length == 15) {
            for (int x = 0; x < number.length; x++) {
                flag = Character.isDigit(number[x]);
            }
        } else if (number.length == 18) {
            for (int x = 0; x < number.length - 1; x++) {
                flag = Character.isDigit(number[x]);
            }
        }
        if (flag && idCard.length() == 15) {
            birthday = "19" + idCard.substring(6, 8) + "-" + idCard.substring(8, 10) + "-" + idCard.substring(10, 12);
        } else if (flag && idCard.length() == 18) {
            birthday = idCard.substring(6, 10) + "-" + idCard.substring(10, 12) + "-" + idCard.substring(12, 14);
        }
        return birthday;
    }

    /**
     * 获取性别
     * @param idCard 身份证号码
     * @return 字符串:"男" 或者 "女"
     */
    public static String getSex(String idCard) {
        int sexnumber = Integer.parseInt(idCard.substring(17));// 运用Integer.parseInt()把括号里的内容转化被整数,通过substring()截取身份证17号位数字
        String sex;// 定义性别
        if (sexnumber % 2 == 0) {// 若在身份证号截取的17号位数字取余数为偶数
            sex = "女";// 判断为女性
        } else {
            sex = "男";// 判断为男性
        }
        return sex;
    }

    /**
     * 获取年龄
     * @param idCard 身份证号码
     * @return 整型,例如:18
     */
    public static int getAge(String idCard) {
        Calendar cal = Calendar.getInstance();// Calendar类,获取日历时间
        int nowyear = cal.get(Calendar.YEAR);// 获取当前年
        int birthyear = Integer.parseInt(idCard.substring(6, 10));// 运用Integer.parseInt()把括号里的内容转化被整数,通过substring()截取身份证6到10号位数字
        int age = nowyear - birthyear;
        return age;
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据身份证号获取出生日期,年龄,性别 的相关文章

随机推荐

  • QT开发 - 信号槽写法

    1 Lambda写法 非重载函数 QCheckBox checkBox1 new QCheckBox check box1 connect checkBox1 QCheckBox stateChanged int state m statu
  • 类的访问权限-public、private、protected

    访问权限 protected 保护 访问权限 为什么要使用protected访问权限 子类的成员函数中 不能直接访问父类的private成员 已经这些成员已经被继承下来了 但是却不能访问 只有通过父类的public函数来间接访问 不是很方便
  • Windows server 2008搭建文件服务器

    服务器达到要求 各部门只能访问自己部门服务器 公司员工只能读取和修改文档 普通用户限制磁盘空间是20M 部门经理50M 总经理不受限制 市场部文件允许读取和修改 不能删除 限制电影 照片文件格式 完成数据备份 并模拟数据丢失进行还原 总体思
  • Protobuf Java (1)

    参考 https developers google cn protocol buffers docs javatutorial 目录 1 定义protobuf 文件 2 编译你的 Protocol Buffers 3 ProtoBuf A
  • git源代码泄露

    需要的工具 kali githack win版没下载成功 安装方法 kali命令行中输入 git clone https github com lijiejie GitHack 下载成功如下 输入GitHack 然后输入python Git
  • Java文件输入流如何才能一行一行读取,一行一行写入

    文件输入流 而且和行有关 那么就必须要想到使用Buffered缓冲流了 BufferedReader和BufferedWriter这两个类里面有很重要的方法 BufferedReader里是readLine BufferedWriter里是
  • UE4 通过Echarts实现各种统计图

    主要内容 本文主要讲解UE4 UMG向网页发送数据 通过WebBrowser插件将用Echarts定制好的统计图在UE4内展现出来 达到数据可视化的效果 本文主要演示柱形图的效果 其它类型的统计图可以结合Echarts官方案列以及文档自行修
  • springboot整合JSR303校验

    4 7 JSR303校验 4 7 1 统一校验的需求 前端请求后端接口传输参数 是在controller中校验还是在Service中校验 答案是都需要校验 只是分工不同 Contoller中校验请求参数的合法性 包括 必填项校验 数据格式校
  • coalesce 函数详解与学习记录

    1 在工作中都用到了此函数 特此学习并记录一下 2 coalesce 用途 1 将空值替换成其他值 2 返回第一个非空值 3 SQL实例 一 select coalesce success cnt 1 from tableA 当succes
  • Python使用管道、队列、zeromq进行IPC速度对比测试

    管道 import sys from multiprocessing import Process Pipe import time import result msg list for i in range 100 msg list ap
  • YOLOv5 backbone(一)

    Backbone概览及参数 Parameters nc 80 number of classes depth multiple 0 33 model depth multiple width multiple 0 50 layer chan
  • 利用外部中断和时间中断计数0-999显示在数码管上(考题)

    include
  • Ubuntu(20.04):设置DNS

    编辑文件 etc systemd resolved conf 设置DNS 8 8 8 8 114 114 114 114 保存退出后 以sudo身份运行 systemctl restart systemd resolved systemct
  • 开源之父--Linus

    Git 很多人都知道 Linus在1991年创建了开源的Linux 从此 Linux系统不断发展 已经成为最大的服务器系统软件了 Linus虽然创建了Linux 但Linux的壮大是靠全世界热心的志愿者参与的 这么多人在世界各地为Linux
  • Python3 初学 DAY2

    num1 minute py minute 7 24 60 print minute num2 print py 注 显示颜色格式 033 显示方式 字体色 背景色m 033 0m 显示颜色参数 显示方式 效果 字体色 背景色 颜色描述 0
  • spark报Got an error when resolving hostNames. Falling back to /default-rack for all

    一 报错代码如下 21 06 01 20 13 36 INFO yarn SparkRackResolver Got an error when resolving hostNames Falling back to default rac
  • 【Spring】Spring官方文档笔记

    Spring 官方文档 和任何一本spring书籍相比 它都更新更全 文章目录 Spring 1 控制反转 Inversion of Control IoC 1 1 依赖注入 dependency injection DI 1 Spring
  • java虚拟机+分隔符

    java 入门 java 虚拟机 1 java虚拟机的平台可移植性 只要将java虚拟机安装于不同平台 我们编译的 class 文件就可以运行 2 jdk java开发 3 jre java运行时环境 jdk jre 下载安装后必须在环境变
  • C语言:利用队列逆置栈

    关注作者 Aqu 蓝空 定义一些功能的函数 void InitStack SqStack S 栈的初始化 void Push SqStack S int data 入栈 int Pop SqStack S 出栈 void StackTrav
  • 根据身份证号获取出生日期,年龄,性别

    java语言 根据身份证号获取出生日期 年龄 性别 测试程序 public class TestUtils public static void main String args String idcard xxxxxxxxxxxxxxxx