刚学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