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

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

前言

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

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

推荐说明

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

最佳实践

引入pom


<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** 获取省份

使用

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BUG】已解决:ModuleNotFoundError: No module named ‘torch‘

已解决&#xff1a;ModuleNotFoundError: No module named ‘torch‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市…

Unity UGUI 之EventSystem

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.EventSystem是什么&#xff1f; 有需要请查看手册&#xff1a;Unity - 手册&#xff1…

2024.7.19最新详细的VMware17.0.0安装

VM官网VMware - Delivering a Digital Foundation For Businesses。现在官网无法下载&#xff0c;点击会跳转到https://access.broadcom.com/default/ui/v1/signin/ 要注册一个账号&#xff1a; 注册登录以后&#xff0c;点击Please select your identity provider. - Support …

昇思25天学习打卡营第2天 | 快速入门

在快速发展的人工智能领域&#xff0c;深度学习已经成为数据分析和模式识别的核心技术。作为一名深度学习初学者&#xff0c;我有幸通过MindSpore平台进行了实战演练&#xff0c;从数据预处理到模型训练与测试&#xff0c;再到模型保存与加载&#xff0c;经历了一次完整的深度学…

编程语言中错误处理机制的思考

当我们编写代码时&#xff0c;在调用其他函数时&#xff0c;函数内部会发生错误&#xff1a; fn f() { // Error can happen when b() // returns an errora b()... }由此产生的问题是: 有时我们不想处理错误&#xff0c;只是从函数返回有时候我们想减轻错误有时候我们希望更…

基于SpringBoot+Vue的校园台球厅设备管理系统(带1w+文档)

基于SpringBootVue的校园台球厅设备管理系统(带1w文档) 基于SpringBootVue的校园台球厅设备管理系统(带1w文档) 本次设计任务是要设计一个校园台球厅人员与设备管理系统&#xff0c;这个系统能够满足校园台球厅人员与设备的管理及用户的校园台球厅人员与设备管理功能。系统的主…

彻底卸载360安全卫士的方法

法一&#xff1a; 按下WindowsR键&#xff0c;并输入msconfig, 在“引导”选项卡中选择“安全引导”&#xff0c;并重新启动进入安全模式。此时&#xff0c;重复第一种方法“应用和功能”-“360安全卫士”-“卸载”&#xff0c;在弹出的对话框中残忍的拒绝它的各种令人发指的无…

go-微服务的设计概括

一、微服务到底是什么&#xff1f; 初学者很容易把微服务和分布式混为一谈&#xff0c;但其实二者之间存在非常大的差异&#xff0c;我个人认为主要有以下几点&#xff1a; 分布式主要是一种技术手段&#xff0c;用来保证多个相同的进程能够共同工作而不出错。采用各种复杂的…

Window任务栏应用图片无法加载解决方法

在Windows系统中&#xff0c;如果任务栏应用图标显示成白色方块&#xff0c;可能是由于图标缓存文件损坏或者显示设置错误导致的。以下是一些解决方法&#xff1a; 重新启动Windows资源管理器&#xff1a; 按下Ctrl Shift Esc组合键打开任务管理器。在“进程”标签页中找到…

2024-07-19 Unity插件 Odin Serializer1 —— 插件介绍

文章目录 1 介绍2 拓展序列化类3 学习目的 1 介绍 ​ Odin Serializer 是 Unity 的一个插件&#xff0c;其主要用途是扩展 Unity 现有的序列化&#xff08;如 MonoBehaviour 或 ScriptableObject 类&#xff09;&#xff0c;并可以独立于 Unity 类使用 Odin Serializer。 ​ …

桌面应用打开默认全屏功能

1.修改package.json 在main属性上面引入新的html页面 {"main": "/index.html","name": "phadcloud","description": "名称","version": "1.0","keywords": ["名称"],&…

基于Ubuntu2310搭建openstack高可用集群B版

openstack-ha 环境初始化安装haproxy安装keepalived数据库集群高可用rabbitmq集群高可用memcache集群配置 keystone高可用glance高可用placement高可用nova高可用neutron高可用horizon高可用 本实验使用两台节点master和node配置haproxy高可用&#xff0c;keepliaved配置主备抢…

IntelliJ IDEA 直接在软件中更新为最新版

当我们的 IDEA 工具许久没有更新&#xff0c;已经拖了好几个版本&#xff0c;想跨大版本更新&#xff0c;比如从2020.2.1 -> 2023.x.x 此时&#xff0c;我们菜单栏点击 Help -> Check for Updates… &#xff0c;右下角会有提示更新&#xff0c;如下图&#xff1a; 点…

leetcode位运算(3211. 生成不含相邻零的二进制字符串)

前言 经过前期的基础训练以及部分实战练习&#xff0c;粗略掌握了各种题型的解题思路。接下来重点专项练习&#xff0c;加强重难点知识的练习。 描述 给你一个正整数 n。 如果一个二进制字符串 x 的所有长度为 2 的 子字符串 中包含 至少 一个 "1"&#xff0c;则称…

go 实现websocket以及详细设计流程过程,确保通俗易懂

websocket简介&#xff1a; WebSocket 是一种网络传输协议&#xff0c;可在单个 TCP 连接上进行全双工通信&#xff0c;位于 OSI 模型的应用层。WebSocket 协议在 2011 年由 IETF 标准化为 RFC 6455&#xff0c;后由 RFC 7936 补充规范。 WebSocket 使得客户端和服务器之间的数…

Python PDF Magic:合并和拆分随心所欲

大家好&#xff01;小编今天要为大家带来一篇关于Python操作PDF的秘籍——无论是要将PDF合并成一份整体&#xff0c;还是将一个庞大的PDF文件拆分成多个小伙伴&#xff0c;都轻松hold住&#xff01;你准备好了吗&#xff1f;让我们开始这场奇妙的PDF操作之旅吧&#xff01; 准…

机械学习—零基础学习日志(高数06——函数特性)

零基础为了学人工智能&#xff0c;真的开始复习高数 函数的性质&#xff0c;开始新的学习&#xff01; 有界性&#xff1a; 解法放这里&#xff1a; 证明有界&#xff0c;其实内部的包含知识点很多。第一&#xff0c;如果有界&#xff0c;你需要证明函数在一定区间内&#xff…

《Techporters架构搭建》-Day02 集成Mybatis-plus

集成Mybatis-plus Mybatis-plus集成Mybatis-plus步骤小结 Mybatis-plus Mybatis-plus官网 MyBatisPlus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。它引入了一些新的特性&…

微信小程序:API 进行Promise化

小程序 API 进行Promise化 安装 miniprogram-api-promise1.0.4 npm install --save miniprogram-api-promise1.0.4yarn add miniprogram-api-promise1.0.4在 app.js 中调用 promisifyAll() 方法。 // 实现异步 API Promise 化 import { promisifyAll } from miniprogram-api-pr…

【探索Linux】P.40(传输层 —— TCP滑动窗口 | 快重传 | 流量控制 )

阅读导航 引言一、TCP滑动窗口1. 为什么要用滑动窗口&#xff08;1&#xff09;逐个确认&#xff08;2&#xff09;优化逐个确认&#xff08;滑动窗口&#xff09; 2. TCP滑动窗口的工作原理 二、快重传的引入三、快速重传详细介绍1. 机制原理2. 触发条件3. 操作步骤4. 与超时重…