身份证里包含了个人生日信息,根据生日也可以计算出年龄。
办公过程中,如果一个一个信息录入,是不是显得十分疲劳。
如果遇到这样有规律的工作,还是交给电脑来做更有优势。
下面介绍一下,如何在身份证中提取生日信息的方法。
No.2在做这个功能之前,首先要了解一下身份证的代码构成,也就是编码规则。
身份证号码编码规则:
公民身份号码是特征组合码,由十七位数字本体码和一位数字或字符(X)校验码组成。
排列顺序从左至右依次为,六位地址码,八位出生日期码,三位顺序码和一位校验码。
6位地址码中,前2位表示省、直辖市、自治区:
11-15 京、津、冀、晋、蒙
21-23 辽、吉、黑
31-37 沪、苏、浙、皖、闽、赣、鲁
41-46 豫、鄂、湘、粤、桂、琼
50-54 渝、川、贵、云、藏
61-65 陕、甘、青、宁、新
后4位表示市、县、区。
8位出生日期码采用8位定长日期表示法:4位年、2位月、2位日。
3位顺序码表示同一日出生的次序和性别,奇数代表男性,偶数代表女性。
最后1位校验码用“0-9”和“X”表示。
下图为例,根据编码规则提取生日和年龄,然后自动添加
No.3下面重点看代码,如何实现整个过程
了解了编码规则,编码过程就比较顺利了。
首先要用到字符串截取函数,如Left(),Right(),Mid()
还会用到替换函数Replace()
整个思路就是把身份证截取第7位到12位数字,其它数字用不到,不做处理。
完整代码
Const Col = "C" '身份证所在列
Const ColTop = 3 '起始行号
Private Sub CommandButton1_Click()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 自动提取身份证生日、年龄
Dim R As Range, Rs As Range, Rows As Long
Rows = ActiveSheet.Range(Col & "65535").End(xlUp).Row
Set 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 String
For Each Rs In R
id = Rs.Value
idSR = 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 = y & s & m & s & d '出生日期
.Offset(0, 1).NumberFormat = "yyyy/mm/dd"
.Offset(0, 2).Value = VBA.Year(VBA.Now) - VBA.Year(.Offset(0, 1)) '年龄
End With
Next Rs
End Sub
截取生日代码为:
idSR = VBA.Mid(id, 7, 8)
上面代码表示,从id变量中第7位开始取8个字符,存储到变量idSR中。
也就是身份证中表示生日的8位数字。
下面对生日进行格式化。
.Offset(0, 1).Value = y & s & m & s & d '出生日期
.Offset(0, 1).NumberFormat = "yyyy/mm/dd"'格式化生日内容
取年龄代码:
.Offset(0, 2).Value = VBA.Year(VBA.Now) - VBA.Year(.Offset(0, 1))
年龄用到一个计算方法,当前年份-生日年份=年龄。
重点说一下常量
Const Col = "C" '身份证所在列
Const ColTop = 3 '起始行号
这两个常量是对表格初始布局的一个定义,在使用如上代码的时候,一定要设置正确。
比如,身份在哪一列就设置哪一列的列字母,如在“D”列,就设置为Col="D"。
同理,行号也一样,身份证号从第几行开始就设为几。如,从第2行开始,就设置为2。
如果有用,就赶快收藏起来吧!
欢迎关注
---END---
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved