通过身份号码查询出生日期、性别的设计
时 间:2007-10-21 10:47:29
作 者:贺德才 ID:140 城市:襄樊
摘 要:身份证查询出生日期
正 文:
Private Sub txtStatusCode_AfterUpdate()
Dim AreaCode, Area, BirthDay, NewCode As String
Dim Calendar As Date
On Error Resume Next
Me.cmdToEdit.SetFocus
Me.txtBirthDay = Null
Me.txtGivePassArea = Null
Me.txtSex = Null
Me.txtStatusCodeNew = Null
Me.txtAge = Null
'检查身份证号码位数
If CheckLength(Me.txtStatusCode) = False Then
MsgBox ("身份证号码的位数出现错误.")
Me.txtStatusCode.SetFocus
Exit Sub
End If
'检查身份证号码中有无非法字符
If CheckChar(Me.txtStatusCode) = False Then
MsgBox ("身份证号码中含有非法字符.")
Me.txtStatusCode.SetFocus
Exit Sub
End If
'检查地区代码
If CheckArea(Mid(Me.txtStatusCode, 1, 6)) = False Then
Exit Sub
End If
Area = ""
AreaCode = Mid(Me.txtStatusCode, 1, 6) '取得地区代码
'取得发证地区名称
Area = Area & DLookup("[名称]", "地区代码", "[代码]='" & Mid(AreaCode, 1, 2) & "0000'")
Area = Area & DLookup("[名称]", "地区代码", "[代码]='" & Mid(AreaCode, 1, 4) & "00'")
Area = Area & DLookup("[名称]", "地区代码", "[代码]='" & AreaCode & "'")
'如果身份证号码位数是十五位则增至十七位
If Len(Me.txtStatusCode) = 15 Then
NewCode = Mid(Me.txtStatusCode, 1, 6) & "19" & Right(Me.txtStatusCode, 9)
Else
NewCode = Me.txtStatusCode
End If
'校验出生日期
BirthDay = Mid(NewCode, 7, 4) & "-" & _
Mid(NewCode, 11, 2) & "-" & Mid(NewCode, 13, 2)
Calendar = DateValue(BirthDay)
If Err() = 13 Then
MsgBox ("身份证号码中的出生日期部分错误.")
Me.txtStatusCode.SetFocus
Exit Sub
End If
Err() = 0
'可以根据情况设置年龄的上下限,这里是:年龄[0,100]
If Year(Date) - Year(BirthDay) > 100 or _
Year(Date) - Year(BirthDay) < 0 or _
Year(BirthDay) > Year(Date) Then
MsgBox ("身份证号码中的出生日期部分错误.")
Me.txtStatusCode.SetFocus
Exit Sub
End If
'校验身份证号码并生成有效的身份证号码
NewCode = ""
NewCode = MakeNewCode(Me.txtStatusCode)
'显示结果
Me.txtStatusCodeNew = NewCode
Me.txtBirthDay = BirthDay
Me.txtGivePassArea = Area
Me.txtSex = IIf(InStr(1, "13579", Right(Me.txtStatusCode, 1)) <> 0, "男", "女")
Me.txtAge = Year(Date) - Year(BirthDay)
Me.txtStatusCode.SetFocus
End Sub
Public Function CheckChar(strCode As String) As Boolean
Dim I As Integer
Dim J As Integer
If Len(strCode) = 18 Then
J = 17
Else
J = Len(strCode)
End If
For I = 1 To J
If Asc(Mid(Me.txtStatusCode, I, 1)) > 57 or _
Asc(Mid(Me.txtStatusCode, I, 1)) < 48 Then
CheckChar = False
Exit Function
End If
Next I
If Len(strCode) = 18 Then
If Asc(UCase(Right(strCode, 1))) > 57 or
Access软件网QQ交流群 (群号:54525238)
Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)