黄绍龙 蒋维
摘要:该文介绍了在Excel中使用身份证读卡器连续读人多个身份证号码并举例说明利用VBA查询对应的数据记录后写入信息的方法。
关键词:身份证号;ActiveX控件;数组;读卡器;VBA
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2020)14-0094-03
1背景
在日常生活中,凡是需要进行身份验证的场合大都需要使用公民的身份证,例如,出行乘坐交通工具需要实名制购票,居民每年缴纳社保金等,办理这些业务都需要提供身份证号。身份证号包含18位数字,位数较多,手工录入效率较低且容易出错。身份证读卡器可快速、准确地提取身份证的相关信息。读取身份证号码后可以实现查询和写入等多种操作,这样就大大提高了工作效率,特别是在1人为其他多人代购车票或代缴费时效果更加明显。本文模拟居民到银行根据身份证号缴纳社保金为例进行说明。
2适用环境
2.1硬件环境
“华视CVR-100UC”身份证读卡器,可实现信息的快速识别,支持XP-win7/8/10系统。
2.2软件环境
Microsoft Excel 2016内置的VBA(Visual Basic for Applica-tions),它是Visual Basic的一种宏语言,VBA专门用于Office的各应用程序中,可以通过VBA编写模块来满足特定的需要。
3身份证信息提取过程
3.1身份证读卡器对于读取信息的存储
“华视CVR-100UC”身份证读卡器每次成功读取一个身份证就会发出提示音,并在本主机的“C:\IDCardPhoto”目录下生成两个文件,存储当前读取的身份证信息,包括bmp格式照片文件和txt格式的身份证文本信息文件。读取下一张身份证信息时,覆盖之前存储的bmp文件和txt文件。其中的txt文件的文件名是wz.txt,信息在一行上显示,各个字段依次是:姓名,性别,名字,出生年月日,籍贯,身份证号码。例如:张三,男,汉,19800810,河南省洛阳市,411023199005035548。
3.2身份证号的提取
现在需要把wz.txt中的身份证号提取出来。首先读取文件中的全部信息到一个字符串变量中,由于不同的字段之间使用逗号间隔,可使用VBA中的Splitf)函数返回一个数组,其中包含基于逗号分隔符分割的各个字段的值。然后就可以读取该数组身份证号字段值。SplitO函数语法是:split(expression,delim-iterl,其中,Expression是包含带分隔符的字符串表达式,Delim-iter是字符串转换为数组时使用的分隔符。
连续读入的多个身份证号通过字符串连接符连接起来,中间用逗号分隔,以备将来依次写入“客户身份证号”对话框的文本框中。
3.3向文本框依次写入身份证号信息
可接收的身份证号个数可以根据需要设定。插入用户窗体,布局标签和文本框如图1所示。先使用Split(1函数将存储多个身份证号并以逗号分隔的字符串用数组进行存储。然后遍历表单上的控件,若控件类型名是“TextBox”则依次向这些文本框中写入各个身份证号。最后显示用户窗体和读入的所有身份证号码。
4应用举例
以模拟居民通过银行缴纳社保为例。在启用宏的工作簿中,工作表Sheetl中包含身份证号、姓名和缴纳金额3列,另外包含“接受读卡器信息”和“写入查询表单”两个ActiveX按钮控件。如图1所示,初始时“写入查询表单”按钮未激活,只有点击“接受读卡器信息”按钮后,即至少读人1个身份证号码后,“写入查询表单”按钮才被激活,以免产生误操作。身份证读卡器每次成功读取身份证信息后(也就是听到“滴”的一声提示音后),点击“接受读卡器信息”按钮读入下一个身份证号码。这里设置最多读取5个身份证号码。点击“写入查询表单”按钮后,弹出如图2所示的“客户身份证号”对话框。点击对话框中的“查询”按钮可对Sheetl中的记录进行检索。若查询项被命中,若缴费金额列不为空则提示已缴费,否则在图3所示的缴费对话框中录入缴费金额,并将缴费金额写入Sheetl对应列。
5結束语
本文介绍的vBA利用读卡器连续读取身份证号的查询系统界面简洁,操作简单,可以方便地移植到其他相关系统应用上。这种技术可以减轻操作人员的负担并大幅度地提高工作效率,具有非常好的实践意义。