生物识别设备集成指南

在许多情况下,可能需要将生物识别设备集成到自己的应用程序中,或者使用它的一些功能,比如获取考勤记录、用户信息、将指纹模板备份到系统数据库中,或者简单地将设备中存储的数据导出到某个远程端点。本文就是为此目的而编写的入门指南,提供了一些源代码片段,以帮助C#开发者节省宝贵的时间,避免繁琐的工作。

虽然设备会有不同的型号,有不同的SDK,但实现过程大致相同。本文包含了一些有用的旧代码片段,如果曾经得到一个生物识别设备(用于考勤的指纹读取器),并希望从中提取数据(金子),这是一个好的起点。

实施设备规格

设备名称:K14

固件版本:ver. 4.0.1 (build 39)

供应商:ZKTeco Inc.

指纹容量:500

记录容量:50000

注意:如果使用的是不同型号的设备,如ZK4500、ZK9500、SLK20M或SLK20R,这里是一个这些设备型号的良好起点。如果使用的是Realtime Biometric等不同品牌的设备,那么在阅读本文之前,最好对以下内容有所了解:

  • 生物识别设备的工作原理、特性和功能
  • 如何使用Regsvr32工具注册/注销DLL
  • 对ref和out参数的一些了解

本文和提供的源代码将帮助完成以下事项:

  • 注册SDK组件
  • 检测设备
  • 连接到设备
  • 从设备中提取一些随机数据(日志数据、用户信息等)
  • 上传数据到设备的源代码
  • 重启设备
  • 如何注册到设备特定事件(未实现/需要根据需要自己实现)

生物识别设备在当今世界被许多公司广泛使用。像ZKTeco这样的公司生产各种形状和大小的生物识别访问控制和考勤设备,每种型号都有不同的功能集。它们为实施它的组织提供了更好的用户认证和安全方式。这是当今世界日益增长的需求。因此,开发者可能会在某个时候遇到其实现。

使用代码

注意:以下程序适用于K14型号的设备。其他设备可能有不同的SDK,因此程序集会略有不同。

为了实现任何生物识别设备,必须在系统中注册相关组件,这可以通过使用Regsvr32工具轻松完成。如果不知道它如何工作,请阅读一些相关主题的博客文章。已经为此目的准备了一个批处理文件,所以在这里很酷。

可以从这里下载SDK。已经在本文中附带了一个SDK样本。可以通过查看Register_SDK.bat文件中的源代码来了解注册机制。

  1. 以管理员权限启动命令提示符
  2. 导航到SDK位置
  3. 执行Register_SDK批处理文件

成功注册后,应该看到以下对话框:

现在,为了实现生物识别设备,必须使用zkemkeeper.dll。

  1. 在项目中添加对zkemkeeper.dll的引用。
  2. 创建一个类文件,并实现上述dll提供的IZKEM接口。
  3. 使用CZKEM类文件执行与设备相关的操作。

假设生物识别设备连接在本地网络上。为了成功地与设备通信,需要知道IP地址和端口号。

  • IP地址:在设备本身分配一个静态IP
  • 默认端口:4370
  • 机器号:1

现在有了有效的IP和端口,让通过源代码来了解demo项目BioMetrix,已经在本文中附带了这个项目。该应用程序通过显示一些API实现来提供帮助。

ZKemClient.cs文件实现了IZKEM接口,包含以下代码。

以下代码有助于在给定的IPAddress和Port上连接到设备,并在成功连接后注册一些事件。(事件尚未实现,需要根据需要自己实现。)

public bool Connect_Net(string IPAdd, int Port) { if (objCZKEM.Connect_Net(IPAdd, Port)) { if (objCZKEM.RegEvent(1, 65535)) { objCZKEM.OnConnected += ObjCZKEM_OnConnected; objCZKEM.OnDisConnected += objCZKEM_OnDisConnected; objCZKEM.OnEnrollFinger += ObjCZKEM_OnEnrollFinger; objCZKEM.OnFinger += ObjCZKEM_OnFinger; objCZKEM.OnAttTransactionEx += new _IZKEMEvents_OnAttTransactionExEventHandler(zkemClient_OnAttTransactionEx); } return true; } return false; }

为了在设备中发生某些事情时触发任何事件,需要注册事件:

bool RegEvent(int dwMachineNumber, int EventMask);

EventMask需要一个整数值,其值根据事件类型而变化。EventMask的完整值列表如下:

  • 1 OnAttTransaction, OnAttTransactionEx
  • 2 (1<<1) OnFinger
  • 4 (1<<2) OnNewUser
  • 8 (1<<3) OnEnrollFinger
  • 16 (1<<4) OnKeyPress
  • 256 (1<<7) OnVerify
  • 512 (1<<8) OnFingerFeature
  • 1024 (1<<9) OnDoor, OnAlarm
  • 2048 (1<<10) OnHIDNum
  • 4096 (1<<11) OnWriteCard
  • 8192 (1<<12) OnEmptyCard
  • 16384 (1<<13) OnDeleteTemplate

要注册多个事件,可以在相关事件的二进制代码之间执行XOR操作。要注册所有实时事件,EventMask的值可以设置为65535,已经在上面的代码中实现了。

可以通过提供机器号(通常是1)来获取用户信息。API实现了out参数以返回输出。在指纹设备中存储了一些随机用户数据,并使用以下代码将其检索回来并显示出来。在这里,TmpData是用户(指纹)模板数据。

public ICollection<UserInfo> GetAllUserInfo(ZkemClient objZkeeper, int machineNumber) { string sdwEnrollNumber = string.Empty, sName = string.Empty, sPassword = string.Empty, sTmpData = string.Empty; int iPrivilege = 0, iTmpLength = 0, iFlag = 0, idwFingerIndex; bool bEnabled = false; ICollection<UserInfo> lstFPTemplates = new List<UserInfo>(); objZkeeper.ReadAllUserID(machineNumber); objZkeeper.ReadAllTemplate(machineNumber); while (objZkeeper.SSR_GetAllUserInfo(machineNumber, out sdwEnrollNumber, out sName, out sPassword, out iPrivilege, out bEnabled)) { for (idwFingerIndex = 0; idwFingerIndex < 10; idwFingerIndex++) { if (objZkeeper.GetUserTmpExStr(machineNumber, sdwEnrollNumber, idwFingerIndex, out iFlag, out sTmpData, out iTmpLength)) { UserInfo fpInfo = new UserInfo(); fpInfo.MachineNumber = machineNumber; fpInfo.EnrollNumber = sdwEnrollNumber; fpInfo.Name = sName; fpInfo.FingerIndex = idwFingerIndex; fpInfo.TmpData = sTmpData; fpInfo.Privelage = iPrivilege; fpInfo.Password = sPassword; fpInfo.Enabled = bEnabled; fpInfo.iFlag = iFlag.ToString(); lstFPTemplates.Add(fpInfo); } } } return lstFPTemplates; }

结论

这为项目提供了起点。现在有了生物识别设备,可以自己尝试源代码并进行实验。有许多程序和事件需要实现,可以根据需要使用。此外,可能还想参考随本文附带的SDK。还有其他SDK/手册可以在线找到,以获取更详细的实现。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485