如何提取身份证生日和年龄,几行VBA代码教你学会

No.1

身份证里包含了个人生日信息,根据生日也可以计算出年龄 。
办公过程中 , 如果一个一个信息录入 , 是不是显得十分疲劳 。
如果遇到这样有规律的工作,还是交给电脑来做更有优势 。
下面介绍一下,如何在身份证中提取生日信息的方法 。
如何提取身份证生日和年龄,几行VBA代码教你学会

No.2

在做这个功能之前,首先要了解一下身份证的代码构成,也就是编码规则 。
身份证号码编码规则:
公民身份号码是特征组合码 , 由十七位数字本体码和一位数字或字符(X)校验码组成 。
排列顺序从左至右依次为 , 六位地址码,八位出生日期码,三位顺序码和一位校验码 。
6位地址码中,前2位表示省、直辖市、自治区:
11-15 京、津、冀、晋、蒙
21-23 辽、吉、黑
【如何提取身份证生日和年龄,几行VBA代码教你学会】31-37 沪、苏、浙、皖、闽、赣、鲁
41-46 豫、鄂、湘、粤、桂、琼
50-54 渝、川、贵、云、藏
61-65 陕、甘、青、宁、新
后4位表示市、县、区 。
8位出生日期码采用8位定长日期表示法:4位年、2位月、2位日 。
3位顺序码表示同一日出生的次序和性别,奇数代表男性,偶数代表女性 。
最后1位校验码用“0-9”和“X”表示 。
下图为例,根据编码规则提取生日和年龄,然后自动添加
如何提取身份证生日和年龄,几行VBA代码教你学会

No.3

下面重点看代码,如何实现整个过程
了解了编码规则,编码过程就比较顺利了 。
首先要用到字符串截取函数,如Left(),Right(),Mid()
还会用到替换函数Replace()
整个思路就是把身份证截取第7位到12位数字,其它数字用不到,不做处理 。
如何提取身份证生日和年龄,几行VBA代码教你学会

完整代码
Const Col = "C" '身份证所在列Const ColTop = 3 '起始行号Private Sub CommandButton1_Click()'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 自动提取身份证生日、年龄Dim R As Range, Rs As Range, Rows As LongRows = ActiveSheet.Range(Col & "65535").End(xlUp).RowSet R = ActiveSheet.Range(Col & ColTop & ":" & Col & Rows)Dim id As String, idSR As String, y As String, m As String, d As String, s As StringFor Each Rs In Rid = Rs.ValueidSR = VBA.Mid(id, 7, 8)'生日s = "-"y = VBA.Left(idSR, 4) '年m = VBA.Left(VBA.Replace(idSR, y, "", 1), 2) '月d = VBA.Right(idSR, 2) '日With Rs.Offset(0, 1).Value = https://www.itzhengshu.com/excel/y & s & m & s & d'出生日期.Offset(0, 1).NumberFormat = "yyyy/mm/dd".Offset(0, 2).Value = https://www.itzhengshu.com/excel/VBA.Year(VBA.Now) - VBA.Year(.Offset(0, 1))'年龄End WithNext RsEnd Sub
截取生日代码为:
idSR = VBA.Mid(id, 7, 8)
上面代码表示,从id变量中第7位开始取8个字符 , 存储到变量idSR中 。
也就是身份证中表示生日的8位数字 。
下面对生日进行格式化 。
.Offset(0, 1).Value = https://www.itzhengshu.com/excel/y & s & m & s & d'出生日期
.Offset(0, 1).NumberFormat = "yyyy/mm/dd"'格式化生日内容
取年龄代码:
.Offset(0, 2).Value = https://www.itzhengshu.com/excel/VBA.Year(VBA.Now) - VBA.Year(.Offset(0, 1))
年龄用到一个计算方法,当前年份-生日年份=年龄 。
重点说一下常量
Const Col = "C" '身份证所在列
Const ColTop = 3 '起始行号
这两个常量是对表格初始布局的一个定义,在使用如上代码的时候,一定要设置正确 。
比如,身份在哪一列就设置哪一列的列字母,如在“D”列,就设置为Col="D" 。
同理,行号也一样 , 身份证号从第几行开始就设为几 。如,从第2行开始,就设置为2 。
如果有用,就赶快收藏起来吧!
欢迎关注
---END---

相关经验推荐