private bool SaveFpDataToDB(byte[] FpData) { List <string> sql = new List <string>(); byte[] buff = new byte[1680]; byte[] FpDataConv = new byte[1680]; byte[] header = { 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x46, 0x50, 0x01, 0x28 }; Array.Copy(header, 0, FpDataConv, 0, header.Length); //Add Fixed Header Array.Copy(FpData, 0, FpDataConv, 80, FpData.Length); ObjFpReader.ConvEnrollData(FpDataConv, ref buff, 1680); //Update RS_Emp、VRS_EmpFingerInfo Table string EmpNo = txtEmpNo.Text; string EnrollNumber = txtFingerNo.Text; string BackupNumber = fpDataList.Count.ToString(); int EmpFingerCount = fpDataList.Count + 1; try { sql.Add("UPDATE RS_Emp SET EmpFingerCount=" + EmpFingerCount.ToString() + " WHERE EmpNo='" + EmpNo + "'"); sql.Add(Pub.GetSQL(DBCode.DB_000300, new string[] { "204", SystemInfo.MacTypeID.ToString(), EnrollNumber, fpDataList.Count.ToString(), "NULL" })); if (SystemInfo.db.ExecSQL(sql) == 0) { SystemInfo.db.UpdateByteData(Pub.GetSQL(DBCode.DB_000300, new string[] { "202", SystemInfo.MacTypeID.ToString(), EnrollNumber, BackupNumber }), "FingerData", buff); } return(true); } catch (Exception) { return(false); } }
private bool Init() { devIdList.Clear(); cbbDevice.Items.Clear(); for (int i = 0; i < ObjFpReader.PISFP_MAX_DEVICE_COUNTS; i++) { byte[] vstrDeviceDescription = new byte[1024]; byte[] vstrDevId = new byte[1024]; if (ObjFpReader.pisEnumerateDevice(i, vstrDevId, vstrDeviceDescription) == ObjFpReader.PISFP_OK) { cbbDevice.Items.Add(Encoding.Default.GetString(vstrDeviceDescription, 0, vstrDeviceDescription.Length)); devIdList.Add(Encoding.Default.GetString(vstrDevId, 0, vstrDevId.Length)); } } if (cbbDevice.Items.Count > 0) { InitFlag = true; cbbDevice.SelectedIndex = 0; InitFlag = false; return(true); } return(false); }
private bool EnrollImport() { int vnRet; vnRet = ObjFpReader.pisClearTptArray(contextId); if (vnRet != ObjFpReader.PISFP_OK) { ErrorDescription(ObjFpReader.INIT_PROC, ObjFpReader.CLEAR_TPT_ARRAY_FUNC, vnRet); ObjFpReader.pisDestroyContext(contextId); return(false); } for (int i = 0; i < fpDataList.Count; i++) { int identifiedID = i + 1; vnRet = ObjFpReader.pisAddTptArray(contextId, identifiedID, fpDataList[i]); if (vnRet != ObjFpReader.PISFP_OK) { ErrorDescription(ObjFpReader.INIT_PROC, ObjFpReader.ADD_TPT_ARRAY_FUNC, vnRet); ObjFpReader.pisDestroyContext(contextId); return(false); } } return(true); }
private bool GetDbFingerData(string EmpNo, string FingerNo) { fpDataList.Clear(); string sql = "SELECT * FROM VRS_EmpFingerInfo WHERE EmpNo='" + EmpNo + "' AND FingerBkNo BETWEEN 0 AND 9 ORDER BY FingerBkNo"; DataTable dt = new DataTable(); try { dt = SystemInfo.db.GetDataTable(sql); for (int i = 0; i < dt.Rows.Count; i++) { byte[] buff = (byte[])dt.Rows[i]["FingerData"]; byte[] buffConv = new byte[1680]; byte[] fpdata = new byte[1600]; ObjFpReader.ConvEnrollData(buff, ref buffConv, 1680); Array.Copy(buffConv, 80, fpdata, 0, 1600); fpDataList.Add(fpdata); } return(true); } catch (Exception) { return(false); } }
private void Exit() { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_ALLLED, ObjFpReader.PISFP_LED_OFF); ObjFpReader.pisCloseDevice(contextId); ObjFpReader.pisDestroyContext(contextId); }
private void btnClearFpData_Click(object sender, EventArgs e) { if (Pub.MessageBoxShowQuestion(Pub.GetResText(formCode, "MsgClearRequest", ""))) { return; } fpDataList.Clear(); if (ClearFpDataToDB(txtEmpNo.Text, txtFingerNo.Text)) { ObjFpReader.pisClearTptArray(contextId); txtInfo.Text = string.Format(Pub.GetResText(formCode, "MsgClearComplete", ""), txtEmpNo.Text); } }
private void Exit() { StopFlag = true; if (deviceCompany == ObjFpReader.PRODUCT_HYSOON || deviceCompany == ObjFpReader.PRODUCT_TAIWAN) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_OFF); } ObjFpReader.pisCloseDevice(contextId); ObjFpReader.pisDestroyContext(contextId); gbxFpReader.Enabled = false; btnInit.Enabled = true; cbbDevice.Enabled = true; }
private bool GetFrCardNo(ref string CardNo) { int vnRet = 0; bool ret = false; byte[] RECardNo = new byte[256]; for (int i = 0; i < ObjFpReader.PISFP_MAX_DEVICE_COUNTS; i++) { byte[] vstrDeviceDescription = new byte[1024]; byte[] vstrDevId = new byte[1024]; if (ObjFpReader.pisEnumerateDevice(i, vstrDevId, vstrDeviceDescription) == ObjFpReader.PISFP_OK) { devIdList.Add(Encoding.Default.GetString(vstrDevId, 0, vstrDevId.Length)); } } if (devIdList.Count > 0) { Exit(); vnRet = ObjFpReader.pisCreateContext(ref contextId); vnRet = ObjFpReader.pisOpenDevice(contextId, devIdList[0]); if (vnRet != 0) { Exit(); return(ret); } // vnRet = ObjFpReader.pisGetCardNumber(contextId, RECardNo ); //控制设备灯 RECardNo = new byte[256]; Application.DoEvents(); vnRet = ObjFpReader.pisGetCardNumber(contextId, RECardNo); if (vnRet == ObjFpReader.PISFP_GET_CARD) { System.Threading.Thread.Sleep(10); } if (vnRet == 0) { CardNo = Pub.GetWGCardNo(RECardNo); ret = true; } Exit(); } return(ret); }
private void Enroll() { //超过 10 枚指纹,不再注册 if (fpDataList.Count > 9) { txtInfo.Text = Pub.GetResText(formCode, "MsgOverRegister", ""); return; } int vnRet; int flag = 1; //控制设备灯 int temp_DeviceCompany = deviceCompany; if (temp_DeviceCompany == ObjFpReader.PRODUCT_HYSOON) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_ALLLED, ObjFpReader.PISFP_LED_OFF); ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_ON); } else if (temp_DeviceCompany == ObjFpReader.PRODUCT_TAIWAN) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_ON); } if (StopFlag) { StopFlag = false; } int isCheckFp = 0, fpArea = 0; int fpExtractCount = 0; int continuosFpPressCount = 0; bool doubleCheckFlag = true; ObjFpReader.CaptureFpStatus capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_Init; while (!StopFlag) { Application.DoEvents(); vnRet = ObjFpReader.pisCapture(contextId, imageBuffer); if (vnRet == ObjFpReader.PISFP_ERR_NOT_CONNECT_DEV) { ErrorDescription(ObjFpReader.ENROLL_PROC, ObjFpReader.CAPTURE_FUNC, vnRet); ObjFpReader.pisCloseDevice(contextId); vnRet = ObjFpReader.pisOpenDevice(contextId, devIdList[cbbDevice.SelectedIndex]); System.Threading.Thread.Sleep(1000); continue; } else if (vnRet != ObjFpReader.PISFP_OK) { ErrorDescription(ObjFpReader.ENROLL_PROC, ObjFpReader.CAPTURE_FUNC, vnRet); ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_ALLLED, ObjFpReader.PISFP_LED_OFF); return; } DrawFpImage(); vnRet = ObjFpReader.pisCheckFp(contextId, imageBuffer, imageWidth, imageHeight, imageRes, ref isCheckFp, ref fpArea); //初始化 if (capFpStatus == ObjFpReader.CaptureFpStatus.CapFp_Init) { if (isCheckFp != 0) { txtInfo.Text = Pub.GetResText(formCode, "MsgLeaveFinger", "");; continue; } else { capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_WaitPressFinger; continuosFpPressCount = 0; } } //等待手指按下时的操作 if (capFpStatus == ObjFpReader.CaptureFpStatus.CapFp_WaitPressFinger) { if (isCheckFp == 0) { promptPressFinger(fpExtractCount + 1); if (continuosFpPressCount < 2) { continuosFpPressCount = 0; continue; } } continuosFpPressCount++; if (fpArea > 80 && continuosFpPressCount > maxContinuosFpPressCount) { capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_GoodFpCaptured; } } //处理获取到的图片 if (capFpStatus == ObjFpReader.CaptureFpStatus.CapFp_GoodFpCaptured) { // 使用最大指纹图像提取指纹 if (ObjFpReader.pisProcess(contextId, imageBuffer, imageWidth, imageHeight, imageRes, feature[fpExtractCount]) != ObjFpReader.PISFP_OK) { ErrorDescription(ObjFpReader.ENROLL_PROC, ObjFpReader.PROCESS_FUNC, vnRet); // return; } //检查指纹数据是否已经存在 if (doubleCheckFlag == true) { int identifiedID = 0; vnRet = ObjFpReader.pisIdentify(contextId, feature[fpExtractCount], ref identifiedID, updatedTemplate, ref updatedFlag); if (vnRet == ObjFpReader.PISFP_OK) { txtInfo.Text = string.Format(Pub.GetResText(formCode, "MsgExist", ""), txtEmpNo.Text, identifiedID); return; } } fpExtractCount++; continuosFpPressCount = 0; if (flag >= 3) { flag = 1; } if (fpExtractCount == 3) { break; } else { capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_PromptTakeoffFinger; } } //获取图片后手指的操作提示 if (capFpStatus == ObjFpReader.CaptureFpStatus.CapFp_PromptTakeoffFinger) { //检测指纹是否合格 int sum = 0; for (int i = 0; i < 57344; i++) { sum += int.Parse(imageBuffer[i].ToString()); } if (isCheckFp != 0) { txtInfo.Text = Pub.GetResText(formCode, "MsgLeaveFinger", ""); capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_Init; continue; } // capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_WaitPressFinger; } } if (temp_DeviceCompany == ObjFpReader.PRODUCT_HYSOON || temp_DeviceCompany == ObjFpReader.PRODUCT_TAIWAN) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_OFF); } if (StopFlag == true) { txtInfo.Text = Pub.GetResText(formCode, "MsgStop", ""); return; } //生成模板 vnRet = ObjFpReader.pisCreateTemplate(contextId, feature[0], feature[1], feature[2], template); if (vnRet != ObjFpReader.PISFP_OK) { ErrorDescription(ObjFpReader.ENROLL_PROC, ObjFpReader.CREATE_TEMPLATE_FUNC, vnRet); //txtInfo.Text = Pub.GetResText(formCode, "MsgCreateTemplate", ""); return; } ////写出到文件 //using (var fs = new FileStream(string.Format("{0}.dat", txtEmpNo.Text), FileMode.Create)) //{ // fs.Write(template, 0, template.Length); //} //添加进识别 vnRet = ObjFpReader.pisAddTptArray(contextId, fpDataList.Count + 1, template); if (vnRet != ObjFpReader.PISFP_OK) { ErrorDescription(ObjFpReader.ENROLL_PROC, ObjFpReader.ADD_TPT_ARRAY_FUNC, vnRet); return; } //保存到数据库 if (SaveFpDataToDB(template)) { fpDataList.Add(template); } txtInfo.Text = string.Format(Pub.GetResText(formCode, "MsgRegisterSuccess", ""), txtEmpNo.Text, fpDataList.Count); }
private void OpenDev(int index) { string vDevId = string.Empty; int vnRet; if (!GetDevIdFromListIndex(index, ref vDevId)) { MessageBoxEx.Show(Pub.GetResText(formCode, "MsgNoDevice", "")); } vnRet = ObjFpReader.pisCreateContext(ref contextId); if (vnRet != ObjFpReader.PISFP_OK) { ErrorDescription(ObjFpReader.INIT_PROC, ObjFpReader.CREATE_CONTEXT_FUNC, vnRet); } txtInfo.Text = Pub.GetResText(formCode, "MsgOpenDevice", ""); vnRet = ObjFpReader.pisOpenDevice(contextId, vDevId); if (vnRet != ObjFpReader.PISFP_OK) { ObjFpReader.pisDestroyContext(contextId); ErrorDescription(ObjFpReader.INIT_PROC, ObjFpReader.OPEN_DEVICE_FUNC, vnRet); return; } vnRet = ObjFpReader.pisGetDeviceInfo(contextId, ObjFpReader.PISFP_PARAM_KIND_COMPANY, ref deviceCompany); if (vnRet != ObjFpReader.PISFP_OK) { deviceCompany = ObjFpReader.PRODUCT_PEFIS; } fpAreaTh = 18; noCheckCountTh = 20; int temp_DeviceCompany = deviceCompany; if (temp_DeviceCompany == ObjFpReader.PRODUCT_HYSOON || temp_DeviceCompany == ObjFpReader.PRODUCT_TAIWAN) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_ON); fpAreaTh = 17; noCheckCountTh = 20; } byte[] engineInfo = new byte[1024]; vnRet = ObjFpReader.pisGetInfo(contextId, ref engineInfo[0], ref imageWidth, ref imageHeight, ref imageRes, ref featureSize, ref templateSize); if (temp_DeviceCompany == ObjFpReader.PRODUCT_HYSOON || temp_DeviceCompany == ObjFpReader.PRODUCT_TAIWAN) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_OFF); } if (vnRet != ObjFpReader.PISFP_OK) { ObjFpReader.pisDestroyContext(contextId); ErrorDescription(ObjFpReader.INIT_PROC, ObjFpReader.GET_INFO_FUNC, vnRet); return; } picFpImage.Width = imageWidth; picFpImage.Height = imageHeight; picFpImage.Image = null; imageBuffer = new byte[picFpImage.Width * picFpImage.Height]; feature[0] = new byte[featureSize]; feature[1] = new byte[featureSize]; feature[2] = new byte[featureSize]; template = new byte[templateSize]; updatedTemplate = new byte[templateSize]; rawImgBuffer = new byte[ObjFpReader.IMPORT_RAW_IMAGE_WIDTH * ObjFpReader.IMPORT_RAW_IMAGE_HEIGHT]; memset(imageBuffer, 0x55, picFpImage.Width * picFpImage.Height); vnRet = ObjFpReader.pisSetMatchParameter(contextId, ObjFpReader.PISFP_DEFAULT_ROTATION_RANGE, ObjFpReader.PISFP_DEFAULT_THRESHOLD); if (vnRet != ObjFpReader.PISFP_OK) { ObjFpReader.pisDestroyContext(contextId); ErrorDescription(ObjFpReader.INIT_PROC, ObjFpReader.GET_INFO_FUNC, vnRet); return; } StopFlag = true; gbxFpReader.Enabled = true; GetDbFingerData(txtEmpNo.Text, txtFingerNo.Text); EnrollImport(); txtInfo.Text = Pub.GetResText(formCode, "MsgInitSuccess", ""); btnInit.Enabled = false; }
private void Verify() { int vnRet; //控制设备灯 int temp_DeviceCompany = deviceCompany; if (temp_DeviceCompany == ObjFpReader.PRODUCT_HYSOON) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_ALLLED, ObjFpReader.PISFP_LED_OFF); ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_ON); } else if (temp_DeviceCompany == ObjFpReader.PRODUCT_TAIWAN) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_ON); } if (StopFlag) { StopFlag = false; } int isCheckFp = 0, fpArea = 0; bool doubleCheckFlag = true; ObjFpReader.CaptureFpStatus capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_Init; while (!StopFlag) { Application.DoEvents(); memset(feature[0], 0x00, featureSize); memset(updatedTemplate, 0x00, templateSize); vnRet = ObjFpReader.pisCapture(contextId, imageBuffer); if (vnRet == ObjFpReader.PISFP_ERR_NOT_CONNECT_DEV) { ErrorDescription(ObjFpReader.VERIFY_PROC, ObjFpReader.CAPTURE_FUNC, vnRet); ObjFpReader.pisCloseDevice(contextId); vnRet = ObjFpReader.pisOpenDevice(contextId, devIdList[cbbDevice.SelectedIndex]); System.Threading.Thread.Sleep(1000); continue; } else if (vnRet != ObjFpReader.PISFP_OK) { ErrorDescription(ObjFpReader.VERIFY_PROC, ObjFpReader.CAPTURE_FUNC, vnRet); ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_ALLLED, ObjFpReader.PISFP_LED_OFF); return; } DrawFpImage(); vnRet = ObjFpReader.pisCheckFp(contextId, imageBuffer, imageWidth, imageHeight, imageRes, ref isCheckFp, ref fpArea); txtInfo.Text = string.Empty; //初始化 if (capFpStatus == ObjFpReader.CaptureFpStatus.CapFp_Init) { if (isCheckFp != 0) { txtInfo.Text = Pub.GetResText(formCode, "MsgLeaveFinger", ""); continue; } else { capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_WaitPressFinger; } } //等待手指按下时的操作 if (capFpStatus == ObjFpReader.CaptureFpStatus.CapFp_WaitPressFinger) { if (isCheckFp == 0) { continue; } if (fpArea > 80) { capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_GoodFpCaptured; } } //处理获取到的图片 if (capFpStatus == ObjFpReader.CaptureFpStatus.CapFp_GoodFpCaptured) { // 使用最大指纹图像提取指纹 if (ObjFpReader.pisProcess(contextId, imageBuffer, imageWidth, imageHeight, imageRes, feature[0]) != ObjFpReader.PISFP_OK) { continue; } //检查fpdata是否已经存在 if (doubleCheckFlag == true) { int identifiedID = 0; vnRet = ObjFpReader.pisIdentify(contextId, feature[0], ref identifiedID, updatedTemplate, ref updatedFlag); if (vnRet == ObjFpReader.PISFP_OK) { txtInfo.Text = string.Format("{0} - {1}", txtEmpNo.Text, identifiedID); } else { if (isCheckFp != 0) { txtInfo.Text = Pub.GetResText(formCode, "MsgFPunregistered", ""); } } //txtInfo.Text = string.Empty; if (isCheckFp == 0) { capFpStatus = ObjFpReader.CaptureFpStatus.CapFp_Init; } continue; } } } if (temp_DeviceCompany == ObjFpReader.PRODUCT_HYSOON || temp_DeviceCompany == ObjFpReader.PRODUCT_TAIWAN) { ObjFpReader.pisLedControl(contextId, ObjFpReader.PISFP_BKLED, ObjFpReader.PISFP_LED_OFF); } if (StopFlag == true) { txtInfo.Text = Pub.GetResText(formCode, "MsgStop", ""); return; } }