最近看了一篇文章是通过身份证号获得必要的信息,联想到以前在做MS系统的时候,通常需要输入身份证号、性别、出生日期,而这些输入只通过身份证就可以获取,应该属于重复输入,还有就是通过验证性别和出生日期与身份证的一致性,也可以避免输入出错,下边的代码是自己写的通过15和18位身份证获得必要信息的代码,也挺好玩的。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
Option Explicit
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
'身份证类
'通过身份证编号获取性别和出生日期
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Private ID_ As String
Private Const IDCARD_LENGTH_DESCRIPTION As String = "身份证编号必须为15位或者18位"
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
'身份证编号
Public Property Get ID() As String
Assert Len(ID_) = 15 Or Len(ID_) = 18, Me, "ID", IDCARD_LENGTH_DESCRIPTION
ID = ID_
End Property
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Public Property Let ID(ByVal sID As String)
Assert Len(sID) = 15 Or Len(sID) = 18, Me, "ID", IDCARD_LENGTH_DESCRIPTION
ID_ = sID
End Property
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
'身份证号长度
Public Property Get IDLength() As Integer
IDLength = Len(ID_)
End Property
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
'性别
Public Property Get SEX() As String
Dim sTemp As String
Assert IDLength = 15 Or IDLength = 18, Me, "SEX", IDCARD_LENGTH_DESCRIPTION
Select Case IDLength
Case 15
sTemp = Mid(ID_, 13, 3)
Case 18
sTemp = Mid(ID_, 3, 15)
End Select
If CInt(sTemp) Mod 2 = 0 Then
SEX = "女"
Else
SEX = "男"
End If
End Property
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
'出生日期
Public Property Get Birthday() As String
Dim sTemp As String
Assert IDLength = 15 Or IDLength = 18, Me, "Birthday", IDCARD_LENGTH_DESCRIPTION
Select Case IDLength
Case 15
sTemp = Mid(ID_, 7, 6)
sTemp = "19" & sTemp
Case 18
sTemp = Mid(ID_, 7, 8)
End Select
Birthday = Mid(sTemp, 1, 4) & "/" & Mid(sTemp, 5, 2) & "/" & Mid(sTemp, 7, 2)
End Property
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)