基于指纹IC卡门禁系统的实现

2013-04-29 05:25彭佩
电脑知识与技术 2013年9期
关键词:门禁系统IC卡指纹

彭佩

摘要:该文以VB为编程语言和ACCESS数据库平台,解决传统C/S模式下单纯利用指纹验证时,数据库中一对多查询的低效率验证身份的问题,同时解决了单纯利用IC卡的身份验证不可靠的问题。

关键词:指纹;门禁系统;IC卡;身份识别

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)09-2169-03

指纹IC卡系统是利用指纹的唯一性和不可替代性来保证使用人身份的正确性,以IC卡的数据储存和加密功能作为使用人与使用单位的信息连接桥梁,实现使用人身份的验证。通过指纹IC卡设备实现指纹的采集、验证和读写IC卡的功能,根据结果发送信号至单片机控制电插锁,达到门禁自动化目的。

1 数据库实现

1.1数据库建立

使用Microsoft Access创建数据库,首先是用户数据表,包括用户编号(UserID),姓名(Name),性别(Sex),备注(fpc),指纹特征(Purv),有效期(vValid)等字段。其次是日志表(log),包括日志流水ID(recordID),用户编号(UserID),进入时间(userData),是否通行(result)等字段。最后是用户表的UserID和日志表的userID对应。

1.2数据库函数创建

1)创建Public Function exesql(ByVal sql As String) As ADODB.Recordset函数

2)利用ADODB建立数据连接

3)打开数据库

4)数据库的读写操作:可直接调用exesql(ByVal sql As String)函数进行操作。

2 指纹数据采集实现

指纹的采集主要依靠URU4000指纹采集仪进行,URU4000可以通过BiokeySDK控件进行操作。

2.1指纹仪初始化连接

使用BiokeySD的InitEngine()方法可以初始化指纹仪,此函数支持同个终端下多个指纹仪同时使用,初始化时必须指定指纹仪的编号进行连接,如: ZKFPEng X1. SensorIndex=0,即可对编号为0的指纹仪进行连接,通过ZKFPEngX1.InitEngine的返回值能判断指纹仪是否连接成功,其中返回0为成功,1为指纹识别驱动加载失败,2为没有连接指纹仪,3为指定的SensorIndex对应的指纹仪不存在。

2.2使用指纹仪进行指纹登记

当指纹仪连接成功后可对指纹进行扫描登记。扫描前必须设置登记指纹的取样次数,原则上不少于3次。在Biokey的ActiveX控件中提供了EnrollCount属性来设置采样次数,本系统将此属性设置为3。另外进行指纹3次采样时,还必须知道成功的次数,防止由于软硬件问题导致无限次取样。同样Biokey控件返回相应的只读属性EnrollIndex确定成功的次数。

2.3 指纹数据调用验证

采集完毕的指纹系统将信息写入数据库,为保证数据正确性,Biokey提供方法Function VerFinger(byval regTemplate, verTemplate, AdoLearning As Boolean, byval AregFeatureChanged As Boolean) As Boolean,可以比对两枚指纹的特征模版是否匹配。

3 IC卡数据读写实现

数据的读写由RUK-200IC实现,使用动态库OUR_MIFARE.dll,用VC6.0++开发,编译成Release实体,适用于WIN2003、XP环境。

3.1 IC卡读卡

动态库提供了读卡函数piccreadex,可一次性读整个区的第0块、第1块、第2块共3块的信息,并返回卡序列号。其原始声明为:

其中ctrlword读卡的控制字,ctrlword是一个字节,相当于八个位,每个位只有0和1两种状态。可定义以下常量:

读块0、块1、块2,仅读指定序列号的卡,需要每次指定密码:

Ctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY

serial只需指向一个至少已分配了4个char空间的可写数组 unsigned char *指针,serial的下标由0开始。keyA1B0为0时以B密码来认证,为非0时以A密码来认证。系统中使用A密码来认证。

*picckey 指向存放卡密码的数组(6个char的密码数组)。

*piccdata0_2是指向下标个数大于48的字节数组,用于存放3个块的数据,其中下标0~15存放作为读出块0的数据,下标16~31存放作为读出块1的数据,下标32~47存放作为读出块2的数据。在执行完上面的函数后,如果返回0,则表示操作成功,可以在VB中使用msgbox提示操作成功。

3.2 IC卡写卡

动态库提供了写卡函数:Piccwriteex,可一次性写整个区的块信息。其原始声明如下:

其中ctrlword读卡的控制字,ctrlword是一个字节,相当于八个位,每个位只有0和1两种状态。可以先定义以下常量:

与读块0、块1、块2一样,当写指定序列号的卡,需要每次指定密码,成功后休眠卡

Ctrlword = BLOCK0_EN+BLOCK1_EN + BLOCK2_EN + NEEDSERIAL+ EXTERNKEY + NEEDHALT

4门禁控制与网络传输日志的实现

4.1门禁控制

提供12V电压电插锁锁上,断电则打开,所以只需一个继电器便可实现以上功能,而继电器的控制,则需要51单片机做PC机的下位机,对继电器进行控制。51单片机提供了RS232转USB接口与PC机对接,在Microsoft Visual Basic中添加MScomm控件可通过USB接口与51单片机进行通讯。通过C语言定义继电器对应单片机管脚sbit RELAY = P1^4;并允许串行接口处于接受状态,写一循环程序,当P1^4收到数据0时,继电器打开,否则继电器合并。

4.2网络传输日志

VB提供了Winsock控件,通过Protoclo设置为TCP协议,用Bind方法绑定一个指定的端口,发卡端使用listen方法监听检测连接状态,在验证端将IP地址赋值给RemoteHost属性,当发卡端的ConnectRequest事件触发后,发卡端的IP地址就赋给了这个属性。

5 结束语

本文介绍了指纹特征采集实现和IC卡的读写实现,指纹的采集依靠URU4000指纹采集仪进行,URU4000可以通过BiokeySDK控件进行操作。数据卡数据的读写由RUK-200IC实现,动态库OUR_MIFARE.dll用VC6.0++开发。

参考文献:

[1] 佟雨兵,张其善. USB型指纹采集仪的设计与实现[J].光电技术应用, 2010(1).

[2] 梁楚樵.基于Miarfe非接触式IC卡的射频识别系统研究与实现[D].武汉:武汉理工大学图书馆,2010.

[3] 苏兵,左敦稳,徐松源.存储器IC卡数据传输的加密研究[J].哈尔滨理工大学学报,2011,8(5).

猜你喜欢
门禁系统IC卡指纹
基于多种生物特征识别的RFID门禁系统设计
工商业IC卡控制器改造为物联网控制器实践
像侦探一样提取指纹
为什么每个人的指纹都不一样
基于AI智慧人脸门禁系统的硬件系统设计
基于单片机的安全门禁系统研究设计
在用电梯加装外接式IC卡运行控制系统设计改进
一种新的无触点IC卡的检测方法
基于单片机的小区门禁系统设计
基于自适应稀疏变换的指纹图像压缩