- 相关推荐
如何利用Visual Basic开发身份证号码批量验证工具软件
如何利用Visual Basic开发身份证号码批量验证工具软件作者/刘小龙
通过对身份证号码实际应用中存在的问题进行详细分析,我们发现每学年的学籍建档、国家助学金申报等方面都离不开身份证号码。同时,人工核对信息工作量大,也易出错,势必对工作造成一定的影响。为此,我们运用大学学习的一些VB知识,根据身份证号码编码规则编写了《身份证号码批量验证工具》软件,使身份证号码核对工作变得简单、轻松。
一、软件的设计步骤
二、软件详细设计
1. 解决方案与软件特色
本程序使用VB在Windows XP环境开发,解决了身份证号码验证过程中存在的易出错、工作量大的问题,支持Excel文件批量验证及信息追加,绿色免安装、小巧、实用性强。
2. 具体设计
下面就根据软件的操作流程图进行介绍软件的功能和实现原理:
(1)操作流程图。
参数设置说明:身份证号码、性别、出生年月所在列均以阿拉伯数字表示,性别、出生年月信息的追加属于选择项。
(2)身份证号码校验值计算函数代码。
Public Function sfzjym(num As String) As String
Dim n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,y,s As Integer
n1=Val(Mid$(num,1,1))*7
n2=Val(Mid$(num,2,1))*9
n3=Val(Mid$(num,3,1))*10
n4=Val(Mid$(num,4,1))*5
n5=Val(Mid$(num,5,1))*8
n6=Val(Mid$(num,6,1))*4
n7=Val(Mid$(num,7,1))*2
n8=Val(Mid$(num,8,1))*1
n9=Val(Mid$(num,9,1))*6
n10=Val(Mid$(num,10,1))*3
n11=Val(Mid$(num,11,1))*7
n12=Val(Mid$(num,12,1))*9
n13=Val(Mid$(num,13,1))*10
n14=Val(Mid$(num,14,1))*5
n15=Val(Mid$(num,15,1))*8
n16=Val(Mid$(num,16,1))*4
n17=Val(Mid$(num,17,1))*2
y=n1+n2+n3+n4+n5+n6+n7+n8+n9+n10+n11+n12+n13+n14+n15+n16+n17
s=y Mod 11
Select Cases
Case 0
sfzjym=“1”
Case 1
sfzjym=“0”
Case 2
sfzjym=“X”
Case 3
sfzjym=“9”
Case 4
sfzjym=“8”
Case 5
sfzjym=“7”
Case 6
sfzjym=“6”
Case 7
sfzjym=“5”
Case 8
sfzjym=“4”
Case 9
sfzjym=“3”
Case 10
sfzjym=“2”
End Select
End Function
函数参数为18位身份证号码,返回值为身份证号码的校验值,即身份证号码最后一位,整个计算过程严格按照GB11643-1999
《公民身份号码》中的规定完成。
(3)验证代码。
Private Sub yz_Click()
On Error GoTo errh
Dim app As Excel.Application
Dim appworkbook As Workbook
Dim appworksheet As Worksheet
Dim hs1 As Integer,hs2 As Integer,err As Integer
Dim adr As String,sfzbh As String
err=0
dkdhk.Action=1
adr$=Mid$(dkdhk.InitDir &“\”& dkdhk.FileName, 2, Len(dkdhk.InitDir & “\” & dkdhk.FileName) - 1)
Set app=New Excel.Application
Set appworkbook=app.Workbooks.Open(adr$)
Set appworksheet=appworkbook.Sheets(1)
Do While appworksheet.Cells(2,1)<> “”
hs1=hs1+1
Loop
jc.Max=hs1
For hs2=2 To hs1+1
sfzbh$=appworksheet.Cells(hs2, Val(l1.Text))
If Mid$(sfzbh$,18,1)=“x"”Then
appworksheet.Cells(hs2,Val(l1.Text))=Mid$(sfzbh$,1,17) & “X”
sfzbh$=Mid$(sfzbh$,1,17) & “X”
End If
If Len(sfzbh$)<>18 Then
err=err+1
appworksheet.Cells(hs2,Val(l1.Text))=“不够18位” & sfzbh$
appworksheet.Cells(hs2,Val(l1.Text))。Font.ColorIndex=3
Else
If Mid$(sfzbh$,18,1)<>sfzjym(sfzbh$) Then
err=err+1
appworksheet.Cells(hs2,Val(l1.Text))=“校验码错误” & sfzbh$
appworksheet.Cells(hs2,Val(l1.Text))。Font.ColorIndex=3
Else
If jz1.Value=1 Then
If Mid$(sfzbh$,17,1) Mod 2=1 Then
appworksheet.Cells(hs2,Val(xb.Text))=“男”
Else
appworksheet.Cells(hs2,Val(xb.Text))=“女”
End If
End If
If jz2.Value=1 Then
appworksheet.Cells(hs2,Val(csny.Text))=Mid$(sfzbh$,7,4) & “-”& Mid$(sfzbh$,11,2) & “-” & Mid$(sfzbh$,13,2)
End If
End If
End If
jc.Value=hs2-2
Next hs2
“MsgBox ”数据验证完成,到文件中查看验证结果“& ”(共验证“& hs1 &”条记录,发现“& err &”处身份证错误信息)“,48,”
提示
app.Visible=True
errh:
End Sub
(4)验证代码需要完成的任务。
①判断身份证号码所在列参数填写是否正确;②判断是否追加性别、出生年月及所在列参数;③读取Excel文件中的身份证号码,根据调用计算身份证号码校验码sfzjym函数判断身份证号码是否正确;④对正确的身份证号码自动校正小写x为大写X;⑤给Excel文件反馈判断信息及错误原因,若选择追加性别、出生年月选项,将对正确的身份证号码相关记录添加性别、出生年月;⑥弹窗提示验证信息量与错误信息量,并自动打开验证的Excel文件。
三、程序所体现特点与应用性
因日常工作中存在着身份证号码大量核对带来的各种问题,经过详细的分析和研究,提出了开发《身份证号码批量验证工具》程序的想法。程序经过反反复复的严格测试,完全能够胜任身份证号码批量验证这一工作,充分体现在下面几点:(1)实用性强,支持对Excel数据的批量验证与信息自动追加;(2)整个操作过程简单、易懂、工作量小;(3)对错误信息有准确的、详细的提示信息,方便二次修正;(4)绿色免安装、小巧。
(甘肃省通渭县第二中学)