我现在只是自己编写了验证17位身份证号码的函数,那么如何同时验证15位的?18位的?请各位帮忙!

解决方案 »

  1.   

    这是我目前使用的验证17位身份证号码的函数:
    Public Shared Function CheckCidInfo(ByVal cid As String) As Boolean
            Dim aCity() As String = {"", "", "", "", "", "", "", "", "", "", _
                                    "", "北京", "天津", "河北", "山西", "内蒙古", "", _
                                    "", "", "", "", "辽宁", "吉林", "黑龙江", "", "", _
                                    "", "", "", "", "", "上海", "江苏", "浙江", "安微", _
                                    "福建", "江西", "山东", "", "", "", "河南", "湖北", _
                                    "湖南", "广东", "广西", "海南", "", "", "", "重庆", _
                                    "四川", "贵州", "云南", "西藏", "", "", "", "", "", _
                                    "", "陕西", "甘肃", "青海", "宁夏", "新疆", "", "", _
                                    "", "", "", "台湾", "", "", "", "", "", "", "", "", _
                                    "", "香港", "澳门", "", "", "", "", "", "", "", "", "国外"}
            Dim iSum As Double = 0
            Dim info As String = ""
            Dim rg As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("^\d{17}(\d|x)$")
            Dim mc As System.Text.RegularExpressions.Match = rg.Match(cid)
            If mc.Success = False Then
                Return False
            End If
            cid = cid.ToLower
            cid = cid.Replace("x", "a")
            If aCity(Integer.Parse(cid.Substring(0, 2))) = "" Then
                'Return "非法地址"
                Return False
            End If
            Try
                DateTime.Parse(cid.Substring(6, 4) & "-" & cid.Substring(10, 2) & "-" & cid.Substring(12, 2))
            Catch ex As Exception
                'Return "非法生日"
                Return False
            End Try
            Dim i As Integer
            For i = 17 To 0 Step -1
                iSum = iSum + (System.Math.Pow(2, i) Mod 11) * Integer.Parse(cid.Substring(17 - i, 1), System.Globalization.NumberStyles.HexNumber)
                '
            Next
            If iSum Mod 11 <> 1 Then
                'Return "非法证号"
                Return False
            End If
            Dim strSex As String
            If (Integer.Parse(cid.Substring(16, 1)) Mod 2) = 1 Then
                strSex = "男"
            Else
                strSex = "女"
            End If
            'Return aCity(Integer.Parse(cid.Substring(0, 2))) & "," & cid.Substring(6, 4) & "-" & cid.Substring(10, 2) & "-" & cid.Substring(12, 2) & "," & strSex
            Return TrueEnd Function
      

  2.   

    通过判断match.length等于多少来判断是否正确,如判断15位:If mc.Success = False or mc.Length>15 Then
       Return False
    End If判断18位的:
    If mc.Success = False or mc.Length>18 Then
       Return False
    End If这样你的方法只要再加上一个参数即可完成15、17、18位校验过程:
    Public Shared Function CheckCidInfo(ByVal cid As String, ByVal length as integer) As Boolean...        Dim rg As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("^\d{" & length.ToString() & "}(\d|x)$")
            Dim mc As System.Text.RegularExpressions.Match = rg.Match(cid)
            If mc.Success = False or mc.Length > length Then
                Return False
            End If
    ...