刚学VB没多久
研究了一下身份证的验证
也参考了网上一些资料
希望帮看看有什么不足
Private Function 身份证信息校验(sfzhV As String, csrqV As String, xbV As String, errorV As String) As Integer
Dim xsV(17) As Integer
Dim i As Integer
Dim sumV As Integer
Dim modV As Integer
Dim dywsV As String
'/**************************************
'***校验身份证是否合法***
'
'身份证校验:1.出生日期 csrqV
' 2.性别 xbV
'入口参数:
' 1.sfzhV 身份证号
' 2.csrqV 出生日期
' 3.xbV 性别
'出口参数:
' 1.errorV 错误信息
'返回值: 身份证信息校验=0 为校验通过
' 身份证信息校验<>0 校验不通过
'
'1.当csrqV = "",xbV = ""时,只校验身份证出生
' 日期是否符合日期格式要求
'2.当csrqV<> ""或xbV <> ""时,同时校验
' 出生日期或性别是否跟身份证相符
'
'/***************************************
'身份证校验系数:
'从第一位到第十七位的系数分别为:
'7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
xsV(0) = 7
xsV(1) = 9
xsV(2) = 10
xsV(3) = 5
xsV(4) = 8
xsV(5) = 4
xsV(6) = 2
xsV(7) = 1
xsV(8) = 6
xsV(9) = 3
xsV(10) = 7
xsV(11) = 9
xsV(12) = 10
xsV(13) = 5
xsV(14) = 8
xsV(15) = 4
xsV(16) = 2
'校验身份证位数
If Len(Trim(sfzhV)) <> 18 Then
errorV = "身份证位数不对!"
身份证信息校验 = -1
Exit Function
End If
sumV = 0
'身份证号码按位与身份证校验系数相乘,并将所有积相加。
For i = 0 To 17
sumV = sumV + Val(Mid(sfzhV, i + 1, 1)) * xsV(i)
Next
'对sumV/11 取模
modV = sumV Mod 11
'余数对应身份证最后一位
'其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。
Select Case modV
Case 0
dywsV = "1"
Case 1
dywsV = "0"
Case 2
dywsV = "X"
Case 3
dywsV = "9"
Case 4
dywsV = "8"
Case 5
dywsV = "7"
Case 6
dywsV = "6"
Case 7
dywsV = "5"
Case 8
dywsV = "4"
Case 9
dywsV = "3"
Case 10
dywsV = "2"
End Select
If dywsV <> Mid(sfzhV, 18) Then
errorV = "身份证号不合法!"
身份证信息校验 = -1
Exit Function
End If
If Trim(csrqV) <> "" And Trim(csrqV) <> Mid(sfzhV, 7, 8) Then
errorV = "身份证号码与所输入的出生日期不符!"
身份证信息校验 = -1
Exit Function
End If
If Trim(xbV) <> "" Then
Select Case Val(Mid(sfzhV, 17, 1)) Mod 2
Case 0
If Trim(xbV) <> "女" Then
errorV = "身份证号码与所输入的性别不符!"
身份证信息校验 = -1
Exit Function
End If
Case 1
If Trim(xbV) <> "男" Then
errorV = "身份证号码与所输入的性别不符!"
身份证信息校验 = -1
Exit Function
End If
End Select
End If
身份证信息校验 = 0
End Function