身份证号码批量验证程序(应用型)

今天翻出一个原来写的软件,主要目的是测试数据录入质量的。尤其是身份证号码准确性的,一直想发给基层使用,由于种种原因而没有实现。今天终于有一个区的姐姐拷走了。呵呵,我的虚荣心终于得到满足了!下面是我整个程序的日志。拿出来晒一下吧。程序是用VB6.0写的。很多资料都是网上搜的,只能算个应用吧。诸位笑话了。
 
本软件为监测乡镇版 WIS 软件录入身份证号码的准确性。
事件绝大部分写在 command2_click() 中实现
1 、软件编写思路:
1 )打开乡镇版 WIS 数据库保存路径: app.path+”\tjylfn\XZDATAS\xz.dbc”
引用“ Microsoft ActiveX Data Objects 2.8 Library ”,连接数据库( Visual Foxpro 6.0
    Set myConn = New ADODB.Connection
    myConn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
        "SourceType=DBC;" & _
        "SourceDB=" + Text1.Text + ";" & _
        "Exclusive=No;"
注: text1.text 为数据库保存路径。
2 )根据选择,判断是对“育龄妇女”,还是对其“其配偶”录入的身份证号码进行监测。
添加控件: Option1 :验证育龄妇女身份证号码
Option2 :验证丈夫身份证号码
默认情况: Option1.Value=True
3 )判断育龄妇女身份证号码准确性(丈夫身份证号码同理)
①首先对基本情况( jbqk )库进行查询,查询录入身份证号码为 18 位的育龄妇女信息。
    mySql = "select fnbm,fnxm,fncsrq,fnsfhm from jbqk where len(allt(fnsfhm))=18"
    myRec.Open mySql, myConn, adOpenDynamic, adLockOptimistic
②根据查询结果,设置循环,逐个判断身份证号码的准确性
    For Row = 0 To myRec.RecordCount - 1
        myRecTemp = myRec.Fields("fnsfhm").Value
              ……
       Next
③身份证号码的判断,根据 ISO 7064 1983 MOD 11-2 校验码,判断校验位是否正确。
具体算法如下:
根据 18 位身份证号码的前 17 位,每一位与其对应的系数相乘,系数表如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
然后,把相乘之后的结果相加,对 11 取模,得到一个 0-10 的数字,根据尾数对应表
0
1
2
3
4
5
6
7
8
9
10
1
0
X
9
8
7
6
5
4
3
2
加上前 17 + 尾数,得出 18 位身份证号码。
代码如下所示:
        intTemp = (Val(Left(Trim(myRecTemp), 1)) * 7 + _
                Val(Mid(Trim(myRecTemp), 2, 1)) * 9 + _
                Val(Mid(Trim(myRecTemp), 3, 1)) * 10 + _
                Val(Mid(Trim(myRecTemp), 4, 1)) * 5 + _
                Val(Mid(Trim(myRecTemp), 5, 1)) * 8 + _
                Val(Mid(Trim(myRecTemp), 6, 1)) * 4 + _
                Val(Mid(Trim(myRecTemp), 7, 1)) * 2 + _
                Val(Mid(Trim(myRecTemp), 8, 1)) * 1 + _
                Val(Mid(Trim(myRecTemp), 9, 1)) * 6 + _
                Val(Mid(Trim(myRecTemp), 10, 1)) * 3 + _
                Val(Mid(Trim(myRecTemp), 11, 1)) * 7 + _
                Val(Mid(Trim(myRecTemp), 12, 1)) * 9 + _
                Val(Mid(Trim(myRecTemp), 13, 1)) * 10 + _
                Val(Mid(Trim(myRecTemp), 14, 1)) * 5 + _
                Val(Mid(Trim(myRecTemp), 15, 1)) * 8 + _
                Val(Mid(Trim(myRecTemp), 16, 1)) * 4 + _
                Val(Mid(Trim(myRecTemp), 17, 1)) * 2) Mod 11
        Select Case intTemp
            Case 0
                lastTemp = "1"
            Case 1
                lastTemp = "0"
            Case 2
                lastTemp = "X"
            Case 3
                lastTemp = "9"
            Case 4
                lastTemp = "8"
            Case 5
                lastTemp = "7"
            Case 6
                lastTemp = "6"
            Case 7
                lastTemp = "5"
            Case 8
                lastTemp = "4"
            Case 9
                lastTemp = "3"
            Case 10
                lastTemp = "2"
        End Select
④根据算法得到的最后一位,和原有的最后一位进行判断。
如果最后一位是 X ,还要增加大小写转换功能。
同时将其他字段数据赋值给变量,并写入新的数据库( db1.mdb )数据表( temp_fnsfhm )。
        If Trim(lastTemp) <> "X" Then
            If (Left(Trim(myRecTemp), 17) & lastTemp) <> Trim(myRecTemp) Then
                myRec2.AddNew
                myRec2.Fields("fnbm").Value = myRecTemp1
                myRec2.Fields("fnxm").Value = myRecTemp2
                myRec2.Fields("fncsrq").Value = myRecTemp3
                myRec2.Fields("fnsfhm").Value = myRecTemp
                myRec2.Update
                Counter = Counter + 1
            End If
        Else
            If (Left(Trim(myRecTemp), 17) & "x") <> Trim(myRecTemp) And (Left(Trim(myRecTemp), 17) & "X") <> Trim(myRecTemp) Then
                myRec2.AddNew
                myRec2.Fields("fnbm").Value = myRecTemp1
                myRec2.Fields("fnxm").Value = myRecTemp2
                myRec2.Fields("fncsrq").Value = myRecTemp3
                myRec2.Fields("fnsfhm").Value = myRecTemp
                myRec2.Update
                Counter = Counter + 1
            End If
        End If
⑤显示在 datagrid 控件上。
    Set DataGrid1.DataSource = myRec2
DataGrid1.Refresh
4 )增加数据导出功能,生成 .txt 文本格式的功能。具体代码参考程序,此处略。

本文出自 “逐梦者家园” 博客,谢绝转载!

你可能感兴趣的:(职场,验证,程序,身份证号码,休闲)