使用身份证阅读器
官方网站为本节内容提供了示例,下载地址:
http://www.foxtable.com/samples/Identify.rar
本节的例子以深证华视电子读写设备有限公司的CVR-100U为例,该公司的网址:
http://www.chinaidcard.com/
需要说明的是,该公司和我们没有任何关系,类似的阅读仪器有很多,大家可以根据需要选择。
本节的任务是设计一个下图所示的窗口,当有新的身份证接触阅读器的时候,能都自动读取身份证中的所有信息(包括照片),并在Foxtable中新增一行数据,将读取的信息写入到新增行中。
设计步骤:
1、首先根据说明书,连接好阅读仪,并安装好设备驱动程序,正常情况下,在Windows的设备管理中,会出现下面一项:
2、根据该设备的开发文档,将其SDK文件复制到Foxtable的安装目录下,该设备的SDK文件包括以下几个文件:
我们提供的示例文件也包括了上图所示的sdk文件,下载地址:
http://www.foxtable.com/samples/Identify.rar
在Foxtable的全局代码中定义好API函数:
Public Declare Function
CVR_InitComm
Lib
"termb.dll"
Alias
"CVR_InitComm"
(ByVal
Port As
Integer) As
Integer
'连接设备
Public Declare Function CVR_Authenticate
Lib
"termb.dll"
Alias
"CVR_Authenticate"
() As Integer
'验证身份证
Public Declare Function CVR_Read_Content
Lib
"termb.dll"
Alias
"CVR_Read_Content"
(ByVal
Active As
Integer) As
Integer
'读取身份证信息
Public Declare Function CVR_CloseComm
Lib
"termb.dll"
Alias
"CVR_CloseComm"
() As Integer
'关闭设备
在编写本节内容时,其SDK的最新版本是4.0。
提示:由于他们的开发包是传统的非托管DLL,所以只需复制到Foxtable安装目录即可使用,千万不要再去引用这些DLL文件。
3、根据开发文档,CVR_Read_Content函数有多种读取模式,本示例使用的是模式4,在此模式下,会生成相片文件"zp.bmp"和身份证信息文件"wz.txt",后者的格式如下:
张三
男
汉
1951年12月25日
广东省湛江市麻章人民大道16号
412111019511225148X
湛江市公安局赤坎分局
2006.11.28-2026.11.28
我们增加一个自定义函数,用于解析"wz.txt"文件的内容,并写入FoxTable,函数名为“Parse”,代码为:
Dim
Info
As
String
Info = FileSys.ReadAllText(ApplicationPath &
"wz.txt", Encoding.Default)
'读取生成的文本文件
info = info.Replace(vbcrlf,vblf)
'将回车换行替换为换行
Dim pars()
As
String = Info.Split(vblf)
'将读取的信息拆分为数组
Dim r
As
Row =
Tables("表A").AddNew
r("姓名")
= pars(0).Trim()
r("性别")
= pars(1).Trim()
r("名族")
= pars(2).Trim()
r("出生日期")
= pars(3).replace("年","-").Replace("月","-").Replace("日","")
r("住址")
= pars(4)
r("身份证号码")
= pars(5)
r("发证机关")
= pars(6)
r("签发日期")
= pars(7).SubString(0,10).Replace(".","-")
r("有效日期")
= pars(7).SubString(11).Replace(",","-")
FileSys.CopyFile(ApplicationPath &
"zp.bmp", ProjectPath &
"\Attachments\" & r("身份证号码")
& ".bmp",True)
'照片复制到Attachments目录
r("照片")
= r("身份证号码") &
".bmp"
4、将窗口的AfterLoad事件代码设置为:
Try
Dim lb1
As WinForm.Label =
e.Form.Controls("Label1")
Dim iRetUSB
As
Integer
For
iPort As
Integer =
1001
To
1016
'遍历端口号
iRetUSB = CVR_InitComm(iPort)
If iRetUSB =
1
Then
Exit
For
End
If
Next
If iRetUSB =
1
Then
lb1.Text =
"设备连接成功"
Else
lb1.Text =
"设备连接失败"
e.Form.TimerEnabled =
False
'停止计时器,使得自动读取功能失效
e.Form.Controls("Button1").Enabled
= False
'禁用读卡按钮
e.Form.Controls("CheckBox1").Enabled
= False
'禁用自动读取复选框
End
If
Catch ex As
Exception
MessageBox.Show(ex.ToString)
End Try
这样打开窗口的时候,将自动连接阅读器。
5、将窗口的BeForeClose事件代码设置为:
Try
CVR_CloseComm()
'断开设备
Catch ex As
Exception
MessageBox.Show(ex.ToString)
End Try
确保窗口关闭的时候,能自动断开阅读器。
6、启用窗口计时器,间隔设置为500,TimerClick事件代码设置为:
Dim
lb1
As WinForm.Label =
e.Form.Controls("Label1")
If CVR_Authenticate=
1
Then
'如果身份证验证通过
Dim
readContent As
Integer =
CVR_Read_Content(4)
'读取身份证信息,注意读取模式设置为4.
If
readContent = 1
Then
lb1.Text =
"读身份证信息成功!"
Functions.Execute("parse")
Else
lb1.Text =
"读身份证信息失败!"
End
If
End
If
提示:间隔不能设置得小于500,否则会影响其他软件包括foxtable的运行,对于配置较差的电脑,最好是1000左右。
7、手工读取信息按钮的代码设置为:
Dim
lb1
As WinForm.Label = e.Form.Controls("Label1")
If CVR_Authenticate= 1
Then
'如果身份证验证通过
Dim
readContent As Integer
= CVR_Read_Content(4)
'读取身份证信息,注意读取模式设置为4.
If
readContent = 1
Then
lb1.Text =
"读身份证信息成功!"
Functions.Execute("parse")
Else
lb1.Text =
"读身份证信息失败!"
End
If
Else
lb1.Text =
"没有检测到有效身份证!"
End
If
本页地址:http://www.foxtable.com/webhelp/topics/2417.htm