No.1

身份证里包含了个人生日信息,根据生日也可以计算出年龄。

办公过程中,如果一个一个信息录入,是不是显得十分疲劳。

如果遇到这样有规律的工作,还是交给电脑来做更有优势。

下面介绍一下,如何在身份证中提取生日信息的方法。




身份证得出年龄 hivesql 身份证号码得到年龄_VBA


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”表示。

下图为例,根据编码规则提取生日和年龄,然后自动添加


身份证得出年龄 hivesql 身份证号码得到年龄_Click_02


No.3

下面重点看代码,如何实现整个过程

了解了编码规则,编码过程就比较顺利了。

首先要用到字符串截取函数,如Left(),Right(),Mid()

还会用到替换函数Replace()

整个思路就是把身份证截取第7位到12位数字,其它数字用不到,不做处理。


身份证得出年龄 hivesql 身份证号码得到年龄_VBA_03


完整代码

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 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 WithNext RsEnd 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---