如何用VB程序实现十五位与十八位的身份证验证,即:如果既输入某个人的15位身份证又输入了这个人18位身份证,系统能提醒这个人已经输入了重复的身份证,
请各位大侠指教(最好有原程序),十分感谢!

解决方案 »

  1.   

    15换18我没换过,所以不知道还有一点,虽然有规定,但是什么可能都是有的,特别是最后的那位有效码参考这里:http://topic.csdn.net/t/20030711/10/2015546.html我印象中的事情,我大学同学,原来15位的身份证,后来换18后,最后4位数字跟原来的完全是不一样的。所以我觉得如果规定不严格,你可以从判断名字、性别、出生地、年月  这些来个大概范围的判断
      

  2.   

    15位升18位是在原15位的生日的年份上加上19,比如“420106880808011",生日是88年8月8日,加上生日后变成420106'19880808'011,成了17位再加上末尾的一位校验位,校验位VB代码如下:
    Private Function checkCode(ByVal NumStr As String) As String
        '计算校验码
        If Len(NumStr) < 17 Then Exit Function
        Dim Wi() As String
        Dim arrVerifyCode() As String
        arrVerifyCode = Split("1,0,x,9,8,7,6,5,4,3,2", ",")
        Wi = Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2", ",")
        Dim t As Long
        Dim i As Integer
        Dim c As String
        For i = 1 To 17
            c = Mid(NumStr, i, 1)
            If IsNumeric(c) = False Then
                Exit Function
            Else
                t = t + CLng(c) * CLng(Wi(i - 1))
            End If
        Next i
         
        t = t Mod 11
        checkCode = arrVerifyCode(t)
        
    End Function
    根据上面的函数,计算出前17位的校验码,即checkCode("42010619880808011")=1,得到18位身份证号:420106198808080111
      

  3.   

    CSDN有过,搜索一下
            很简单
    请看官方的身份证号规范