There are requirements where you have to integrate a biometric device into your own application or some part of it like fetching the attendance records, user information, backing up the fingerprint templates into your system database or export it somewhere remotely, etc.
For that very purpose, this article is written as a getting started guide with a few pieces of source code such that it helps C# developers to save some valuable time with all the troublesome work.
Note: Though the devices will be of various models, with a different set of sdk, the implementation procedure will be somewhat the same.
The following article contains some useful old pieces of code, if you ever get your hands on a biometric device (fingerprint reader for Time & Attendance) and want to extract gold(data) out of it.
Implemented Device Specification
Device Name : K14
Firmware Ver : ver. 4.0.1 ( build 39 )
Vendor : ZKTeco Inc.
FP : 500
Records : 50000
If you are working with a different model of the device like ZK4500, ZK9500, SLK20M or SLK20R
. Here is a good starting
point for those device models.
Prior to going through the following article, it would be beneficial if you have some good understanding of the following things:
- How a biometric device works, its features and functionalities
- How to Register/ Unregister DLLs using the
- Knowledge about how the
out parameters work
The article and the source code provided will help you with the following things:
- Registering the SDK components
- Ping the device
- Connecting to the device
- Extracting some random data out of the device (Log Data, User Info, etc.)
- Source code to upload data to the device
- Restarting the device
- How to register to device specific events [Not Implemented/ You will have to implement it yourself per your need]
Biometric Devices are being used extensively in many corporations through out the world these days. Companies like ZKTeco manufacture biometric access control and Time and Attendance in various shapes and sizes with different set of features per model. They provide a better way of user authentication and security in organizations who implement it. It is a growing demand in today's world. Hence, developers are likely to come across its implementation at some point.
Using the Code
Note: The follow procedures are applicable for the K14 model devices. Other devices might have a different set of SDK, hence a slightly different set of procedures.
In order to implement any biometric device, you will have to register the related components in the system, which can be easily done by using the
Regsvr32 utility. If you don't know how it works, please go through some blog posts in the related topic. We already have a batch file ready for that very purpose, Hence, we are cool here.
You can download the SDK from here. I have already attached an SDK sample along with this article. You can go through the source code inside the Register_SDK.bat to see the registration mechanism.
Registering the Components
- Fire up a Command Prompt with Administrator Privilege
- Navigate to the SDK location
- Execute the
Register_SDK batch file
On Successful Registration
To implement the biometric device, you will have to use the zkemkeeper.dll.
Implementing the SDK
- Add Reference to the zkemkeeper.dll in a project. The DLL gives access to the following things:
- Create a class file and implement the
- Use the
CZKEM class file to perform device related operations.
Let's say your Biometric device is connected in the local area network. To make a successful communication with the device, you need to know the IP address and the Port No.
IP address : Assign a static IP in the device itself
Default Port : 4370
Machine No : 1
Now we have a valid IP and Port, let's go through the source code used in a demo project entitled
BioMetrix which I have attached along with this article. The application helps by showing some of the API implementations.
The ZKenClient.cs file implements the
IZKEM interface which contains the following code.
Connecting to the Device
The following code helps connect to the device at the given
Port and on successful connection, it registers some events.
(The events are not implemented though, you will have to implement it yourself as per your need.)
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;
To fire any event when something occurs in the device, we need to register the event:
bool RegEvent(int dwMachineNumber, int EventMask);
EventMask requires an integer value whose value varies based on the type of event. The complete list of
EventMast values are given below:
|1 || || |
|2 (1<<1) || |
|4 (1<<2) || |
|8 (1<<3) || |
|16 (1<<4) || |
|256 (1<<7) || |
|512 (1<<8) || |
|1024 (1<<9) || |
|2048 (1<<10) || |
|4096 (1<<11) || |
|8192 (1<<12) || |
|16384 (1<<13) || |
To register for multiple-events, we can perform XOR operations between binary codes of related events.
To register all real-time events, the value of
Eventmast can be set as
65535 which I have implemented in the above code.
Fetching User Info
The user information can be fetched by providing the machine number. The API implements the
out parameter to give back the output. I had stored some random user data in the fingerprint device and used the following code to retrieve it back and display it. The
TmpData is the users (fingerprint) template data.
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>();
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();
Well, that gives you the starting point for your project. With a biometric device in hand, you can now experiment with the source code yourself and play along.
There are numerous procedures and events to be implemented which you can use per you need. Also, you might want to take help from the SDK that I have attached along with this article. There are other SDK/manuals which you can find online for more detailed implementation.
Feel free for any queries and feedbacks.