生物识别指纹

本文关键字:指纹 生物识别 | 更新日期: 2023-09-27 18:35:18

我正在使用ZKFinger SDK2.3.3.1版本和设备通信协议 SDK(32 位 Ver6.2.4.1 -- DLL 版本: zkemkeeper.dll - 6.2.4.1. 我有一个小型USB指纹扫描仪。当我扫描指纹时,

我得到一个字节数组.我将其保存在位图文件和jpg中的光盘中,指纹扫描后看起来相当不错。为了将指纹模板设置为设备上的用户,我分解了指纹图像,然后调用 zkemkeeper.dll 的 SetUserTmp 函数。

I am getting size error , (-3) in code.
How can i go further? What is my mistake? 

以下是我将手指从USB设备转移到生物识别设备的代码

   bool fullImage = false;
            zkfpEng.SaveJPG("Myfirstfinger.jpg");
            string strtmp, sRegTemplate;
            object pTemplate;

            sRegTemplate = zkfpEng.GetTemplateAsStringEx("9");
            pTemplate = zkfpEng.DecodeTemplate1(sRegTemplate);
            // Note: 10.0Template can not be compressed
            zkfpEng.SetTemplateLen(ref pTemplate, 602);
            zkfpEng.SaveTemplate("Myfirstfingerprint.tpl", pTemplate);

            byte[] TmpData = new byte[700];
            TmpData =ObjectToByteArray(pTemplate);

            if (bIsConnected == false)
            {
                MessageBox.Show("Please connect the device first!", "Error");
                return;
            }

            int idwFingerIndex = Convert.ToInt32(cbFingerIndex.Text.Trim());
            int idwEnrollNumber = Convert.ToInt32(txtUserID.Text.Trim());
            int iTmpLength = 0;
            string sdwEnrollNumber = txtUserID.Text.Trim();

            axCZKEM1.EnableDevice(iMachineNumber, false);
            Cursor = Cursors.WaitCursor;
            bool IsSetTmp = false;
            IsSetTmp = axCZKEM1.SetUserTmp(iMachineNumber, idwEnrollNumber, idwFingerIndex, ref TmpData[0]);
            int errCode = 0;
            axCZKEM1.GetLastError(ref errCode);
            MessageBox.Show(IsSetTmp.ToString() + " " + errCode.ToString());
            if (IsSetTmp == true)
            {
                MessageBox.Show("User template set successfully!", "Success");
            }
            else
            {
                MessageBox.Show("User template not set successfully!", "Error");
            }

生物识别指纹

我认为您不必将其转换为图像文件,就像Remin所说的那样。这里有一些例子。我正在使用 XAF 和 MySQL 数据库

private void DownloadUserInformationAction_Execute(object sender, SimpleActionExecuteEventArgs e)
    {
        IObjectSpace os = Application.CreateObjectSpace();
        Terminal terminal = (Terminal)View.SelectedObjects[0];
        //create new czkemclass obj
        CZKEMClass myCZKEMClass = new CZKEMClass();
        //connecting the device
        myCZKEMClass.Connect_Net(terminal.IPAddress, terminal.Port);
        //Initialize variable for store temporary user information
        int tMachineNo = 0;
        string tEnrollNo = "";
        string tName = "";
        string tPassword = "";
        int tPrivilage = 0;
        bool tEnabled = false;
        int tFingerIndex;
        int tFlag = 0;
        string tTemplateData = "";
        int tTemplateLength = 0;
        myCZKEMClass.EnableDevice(terminal.DeviceId, false);
        myCZKEMClass.ReadAllUserID(terminal.DeviceId);
        myCZKEMClass.ReadAllTemplate(terminal.DeviceId);
        while (myCZKEMClass.SSR_GetAllUserInfo(tMachineNo, out tEnrollNo, out tName, out tPassword, out tPrivilage, out tEnabled))
        {
            for (tFingerIndex = 0; tFingerIndex < 10; tFingerIndex++)
            {
                if (myCZKEMClass.GetUserTmpExStr(tMachineNo, tEnrollNo, tFingerIndex, out tFlag, out tTemplateData, out tTemplateLength))
                {
                    EmployeeBiometric employeeBiometric = new EmployeeBiometric(terminal.Session);
                    //employeeBiometric.EnrollNumber = tEnrollNo;
                    XPCollection<Employee> employees = new XPCollection<Employee>(terminal.Session);
                    employeeBiometric.Employee = employees.Where(emp => emp.EnrollNo == tEnrollNo).FirstOrDefault();//(emp => emp.Sequence.ToString() == tEnrollNo).FirstOrDefault();
                    employeeBiometric.UserName = tName;
                    employeeBiometric.Password = tPassword;
                    employeeBiometric.Privilege = (Privilege)Enum.ToObject(typeof(Privilege), tPrivilage);
                    employeeBiometric.Enabled = tEnabled;
                    employeeBiometric.FingerprintIndex = tFingerIndex;
                    employeeBiometric.FingerprintTemplate = tTemplateData;
                    employeeBiometric.TemplateLength = tTemplateLength;
                    terminal.Session.CommitTransaction();
                }
            }
        }
        myCZKEMClass.EnableDevice(terminal.DeviceId, true);
    }

这是将指纹图像从设备下载到应用程序的方法。

在这里,您可以将其上传回另一台设备

private void UploadUserInformationAction_Execute(object sender, PopupWindowShowActionExecuteEventArgs e)
    {
        IObjectSpace os = Application.CreateObjectSpace();
        EmployeeBiometric employeeBiometric = (EmployeeBiometric)View.SelectedObjects[0];
        EmployeeBiometricParameter param = (EmployeeBiometricParameter)e.PopupWindowViewCurrentObject;
        //create new czkemclass obj
        CZKEMClass myCZKEMClass = new CZKEMClass();
        //connecting the device
        myCZKEMClass.Connect_Net(param.Terminal.IPAddress, param.Terminal.Port);
        myCZKEMClass.EnableDevice(param.Terminal.DeviceId, false);

        int myCount = View.SelectedObjects.Count;
        //Set specific user to fingerprint device
        for (int i = 1; i <= myCount; i++)
        {
            int tMachineNo = param.Terminal.DeviceId;
            string tEnrollNo = employeeBiometric.Employee.EnrollNo;//Sequence.ToString();
            string tName = employeeBiometric.UserName;
            string tPassword = employeeBiometric.Password;
            int tPrivilege = (int)employeeBiometric.Privilege;
            bool tEnabled = employeeBiometric.Enabled;
            int tFingerIndex = employeeBiometric.FingerprintIndex;
            string tTmpData = employeeBiometric.FingerprintTemplate;
            int tFlag = 1;
            if (myCZKEMClass.SSR_SetUserInfo(tMachineNo, tEnrollNo, tName, tPassword, tPrivilege, tEnabled))
            {
                myCZKEMClass.SetUserTmpExStr(tMachineNo, tEnrollNo, tFingerIndex, tFlag, tTmpData);
            }
        }
        myCZKEMClass.RefreshData(param.Terminal.DeviceId);
        myCZKEMClass.EnableDevice(param.Terminal.DeviceId, true);
    }

这是我的"终端"类

public partial class Terminal : XPCustomObject
{
    Guid fOid;
    [Key(AutoGenerate = true), Browsable(false)]
    public Guid Oid
    {
        get { return fOid; }
        set { SetPropertyValue<Guid>("Oid", ref fOid, value); }
    }
    private Branch _Branch;
    [RuleRequiredField("", DefaultContexts.Save, "Branch required")]
    public Branch Branch
    {
        get
        {
            return _Branch;
        }
        set
        {
            SetPropertyValue("Branch", ref _Branch, value);
        }
    }
    string fDescription;
    [RuleUniqueValue("", DefaultContexts.Save, "The value was already registered within the system.", ResultType = ValidationResultType.Warning)]
    [RuleRequiredField("", DefaultContexts.Save, "Description required")]
    public string Description
    {
        get { return fDescription; }
        set { SetPropertyValue<string>("Description", ref fDescription, value); }
    }
    string fIPAddress;
    [Size(15)]
    public string IPAddress
    {
        get { return fIPAddress; }
        set { SetPropertyValue<string>("IPAddress", ref fIPAddress, value); }
    }
    private int _Port;
    public int Port
    {
        get
        {
            return _Port;
        }
        set
        {
            SetPropertyValue("Port", ref _Port, value);
        }
    }
    string fDeviceDescription;
    public string DeviceDescription
    {
        get { return fDeviceDescription; }
        set { SetPropertyValue<string>("DeviceDescription", ref fDeviceDescription, value); }
    }
    private int _DeviceId;
    public int DeviceId
    {
        get
        {
            return _DeviceId;
        }
        set
        {
            SetPropertyValue("DeviceId", ref _DeviceId, value);
        }
    }
    private bool _Disabled;
    public bool Disabled
    {
        get
        {
            return _Disabled;
        }
        set
        {
            SetPropertyValue("Disabled", ref _Disabled, value);
        }
    }}

将 FP 作为字符串读取,并将相同的字符串推送到生物识别设备,而无需任何压缩或转换。