Java 如何提取身份证中的生日

👆🏻👆🏻👆🏻关注博主,让你的代码变得更加优雅。

前言

Hutool 是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的"。

官网:https://www.hutool.cn/

推荐说明

在日常开发中,我们对身份证的验证主要是正则方式(位数,数字范围等),但是中国身份证,尤其18位身份证每一位都有严格规定,并且最后一位为校验位。而我们在实际应用中,针对身份证的验证理应严格至此。于是IdcardUtil应运而生。

最佳实践

引入pom

xml 复制代码
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <!-- 请查看最新版本 https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
    <version>5.8.26</version>
</dependency>

介绍

**IdcardUtil**现在支持大陆15位、18位身份证,港澳台10位身份证。

工具中主要的方法包括:

  1. **isValidCard** 验证身份证是否合法
  2. **convert15To18** 身份证15位转18位
  3. **getBirthByIdCard** 获取生日
  4. **getAgeByIdCard** 获取年龄
  5. **getYearByIdCard** 获取生日年
  6. **getMonthByIdCard** 获取生日月
  7. **getDayByIdCard** 获取生日天
  8. **getGenderByIdCard** 获取性别
  9. **getProvinceByIdCard** 获取省份

使用

java 复制代码
String ID_18 = "321083197812162119";
String ID_15 = "150102880730303";

//是否有效
boolean valid = IdcardUtil.isValidCard(ID_18);
boolean valid15 = IdcardUtil.isValidCard(ID_15);

//转换
String convert15To18 = IdcardUtil.convert15To18(ID_15);
Assert.assertEquals(convert15To18, "150102198807303035");

//年龄
DateTime date = DateUtil.parse("2017-04-10");
        
int age = IdcardUtil.getAgeByIdCard(ID_18, date);
Assert.assertEquals(age, 38);

int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);
Assert.assertEquals(age2, 28);

//生日
String birth = IdcardUtil.getBirthByIdCard(ID_18);
Assert.assertEquals(birth, "19781216");

String birth2 = IdcardUtil.getBirthByIdCard(ID_15);
Assert.assertEquals(birth2, "19880730");

//省份
String province = IdcardUtil.getProvinceByIdCard(ID_18);
Assert.assertEquals(province, "江苏");

String province2 = IdcardUtil.getProvinceByIdCard(ID_15);
Assert.assertEquals(province2, "内蒙古");

写在最后

给大家推荐一个非常完整的Java项目搭建的最佳实践,也是本文的源码出处,由大厂程序员&EasyExcel作者维护。

github地址:https://github.com/zhuangjiaju/easytools

gitee地址:https://gitee.com/zhuangjiaju/easytools

相关推荐
Mr_star_galaxy几秒前
【MySQL基础】视图和权限管理
数据库·mysql
一切顺势而行3 分钟前
python 面向对象
开发语言·python
cyforkk27 分钟前
Tomcat 类加载机制解析:为何依赖包必须放在 WEB-INF/lib 目录下
java
绍兴贝贝1 小时前
代码随想录算法训练营第四十六天|LC647.回文子串|LC516.最长回文子序列|动态规划总结
数据结构·人工智能·python·算法·动态规划·力扣
JaJian.1 小时前
Java后端服务假死问题排查与解决
java·开发语言
救赎小恶魔1 小时前
C++算法(5)
java·c++·算法
lipiaoshuigood1 小时前
MySQL 数据出海之数据同步方案
数据库·mysql
重生之后端学习1 小时前
236. 二叉树的最近公共祖先
java·数据结构·算法·职场和发展·深度优先
___波子 Pro Max.2 小时前
Python参数解析默认True变False
python
Sun_gentle2 小时前
java.lang.RuntimeException: Could not load wrapper properties from ‘C:\Users\
java·开发语言·安卓