Hi,大家好呀!
最近一次直播,有人提了一个问题,如何提取身份证的年龄?刚好,最近苦于没有灵感,不知道写啥了,那我们就来看看身份证的一些该怎么处理。
其实我们的身份证号上面是没有年龄信息,但可以通过出生年月来计算年龄。同时,我们的身份证号还包含了省份,性别等信息。
在动手开发前,我们先要知道身份证号的一些规则,具体的如下:
-
前 6 位:地址码(省市区)
-
第 7-14 位:出生日期(YYYYMMDD)
-
第 15-17 位:顺序码(第 17 位奇数为男性,偶数为女性)
-
第 18 位:校验码
知道了大概的规则后,我们就知道怎么开发,无非就是处理字符串了,让我们动手吧!
01
创建窗体
这里我们需要创建一个窗体,在窗体上放几个文本框,具体的如图:

02
写代码
窗体建好了,我们就可以动手写代码了,我们将获取身份证号的信息写在文本框的更新后事件里面,具体的代码如下:
Private Sub txtID_AfterUpdate()
Dim BirthDate As String
Dim Gender As String
Dim ProvinceCode As String
Dim Province As String
' 检查身份证号码长度是否为18位
If Len(Me.txtID) <> 18 Then
MsgBox "无效的身份证号码", vbCritical
Me.txtID.SetFocus
Exit Sub
End If
' 提取出生日期 (第7到14位)
BirthDate = Mid(txtID, 7, 8)
Me.txtBirth = Left(BirthDate, 4) & "年" & Mid(BirthDate, 5, 2) & "月" & Right(BirthDate, 2) & "日"
' 提取性别 (第17位,奇数为男,偶数为女)
If CInt(Mid(txtID, 17, 1)) Mod 2 = 0 Then
Gender = "女"
Else
Gender = "男"
End If
Me.txtSex = Gender
' 提取省份代码 (前2位)
ProvinceCode = Left(txtID, 2)
Province = GetProvinceName(ProvinceCode)
Me.txtProvince = Province
Me.txtAge = DateDiff("Y", Left(BirthDate, 4), Year(Date))
End Sub
' 根据省份代码获取部分省份名称的函数
Function GetProvinceName(Code As String) As String
Select Case Code
Case "11": GetProvinceName = "北京"
Case "31": GetProvinceName = "上海"
Case "32": GetProvinceName = "江苏"
Case Else: GetProvinceName = "未知"
End Select
End Function
省份代码那里,我就先写几个了,其他的就由大家自行去补充了,或者大家也可以从国家统计局官方网站下载最新的全国行政区划代码。
03
运行测试
最后,我们就可以来运行测试了,我们来看一下效果:

身份证号我是随便输入的,如果有雷同,那就是巧合了。
OK,那到这里的话,就可以了,大家快去试一下吧。
1198

被折叠的 条评论
为什么被折叠?



