使用身份证阅读器

官方网站为本节内容提供了示例,下载地址:
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