private void GetMatcherSettings(UFMatcher Matcher) { // Security level ranges from 1 to 7 cbSecurityLevel.SelectedIndex = Matcher.SecurityLevel - 1; cbFastMode.Checked = Matcher.FastMode; }
public void InitializeReader(string connectionString) { m_ScannerManager = new UFScannerManager(new ScannerManager()); m_Scanner = null; m_Database = null; m_Matcher = null; m_bTemplate1 = new byte[nMAX_TEMPLATE_SIZE]; m_szConnectionString = connectionString; }
private void btnInit_Click(object sender, EventArgs e) { //=========================================================================// // Initilize scanners //=========================================================================// UFS_STATUS ufs_res; int nScannerNumber; Cursor.Current = Cursors.WaitCursor; ufs_res = m_ScannerManager.Init(); if (ufs_res == UFS_STATUS.OK) { tbxMessage.AppendText("UFScanner Init: OK\r\n"); } else { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner Init: " + m_strError + "\r\n"); Cursor.Current = this.Cursor; return; } m_ScannerManager.ScannerEvent += new UFS_SCANNER_PROC(ScannerEvent); nScannerNumber = m_ScannerManager.Scanners.Count; tbxMessage.AppendText("UFScanner GetScannerNumber: " + nScannerNumber + "\r\n"); UpdateScannerList(); if (cbScanTemplateType.SelectedIndex == -1) { cbScanTemplateType.SelectedIndex = 1; m_nType = 1; } //=========================================================================// //=========================================================================// // Create matcher //=========================================================================// m_Matcher = new UFMatcher(); if (m_Matcher.InitResult == UFM_STATUS.OK) { tbxMessage.AppendText("UFMatcher Init: OK\r\n"); } else { UFMatcher.GetErrorString(m_Matcher.InitResult, out m_strError); tbxMessage.AppendText("UFMatcher Init: " + m_strError + "\r\n"); } GetMatcherSettings(m_Matcher); //=========================================================================// Cursor.Current = this.Cursor; }
private void btnSelectionVerify_Click(object sender, EventArgs e) { UFD_STATUS ufd_res; UFM_STATUS ufm_res; int Serial; // Input finger data byte[] Template = new byte[MAX_TEMPLATE_SIZE]; int TemplateSize; // bool VerifySucceed; if (lvDatabaseList.SelectedIndices.Count == 0) { tbxMessage.AppendText("Select data\r\n"); return; } else { Serial = Convert.ToInt32(lvDatabaseList.SelectedItems[0].SubItems[DATABASE_COL_SERIAL].Text); } ufd_res = m_Database.GetDataBySerial(Serial, out m_UserID, out m_FingerIndex, m_Template1, out m_Template1Size, m_Template2, out m_Template2Size, out m_Memo); if (ufd_res != UFD_STATUS.OK) { UFDatabase.GetErrorString(ufd_res, out m_strError); tbxMessage.AppendText("UFDatabase UpdateDataBySerial: " + m_strError + "\r\n"); return; } if (!ExtractTemplate(Template, out TemplateSize)) { return; } DrawCapturedImage(m_Scanner); ufm_res = m_Matcher.Verify(Template, TemplateSize, m_Template1, m_Template1Size, out VerifySucceed); if (ufm_res != UFM_STATUS.OK) { UFMatcher.GetErrorString(ufm_res, out m_strError); tbxMessage.AppendText("UFMatcher Verify: " + m_strError + "\r\n"); return; } if (VerifySucceed) { tbxMessage.AppendText("Verification succeed (Serial = " + Serial + ")\r\n"); } else { tbxMessage.AppendText("Verification failed\r\n"); } }
public string Initializescanner() { //=========================================================================// // Initilize scanners //=========================================================================// UFS_STATUS ufs_res; int nScannerNumber; string tbxMessage = ""; Cursor.Current = Cursors.WaitCursor; ufs_res = m_ScannerManager.Init(); // Cursor.Current = this.Cursor; if (ufs_res == UFS_STATUS.OK) { tbxMessage = "UFScanner Init: OK\r\n"; } else { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage = "UFScanner Init: " + m_strError + "\r\n"; return(tbxMessage); } nScannerNumber = m_ScannerManager.Scanners.Count; tbxMessage = "UFScanner GetScannerNumber: " + nScannerNumber + "\r\n"; if (nScannerNumber == 0) { tbxMessage = "There's no available scanner\r\n"; return(tbxMessage); } else { tbxMessage = "First scanner will be used\r\n"; } m_Scanner = m_ScannerManager.Scanners[0]; m_Scanner.Timeout = 5000; //=========================================================================// // UpdateDatabaseList(); //=========================================================================// //=========================================================================// // Create matcher //=========================================================================// m_Matcher = new UFMatcher(); return(""); //=========================================================================// }
private void btnIdentify_Click(object sender, EventArgs e) { UFD_STATUS ufd_res; UFM_STATUS ufm_res; // Input finger data byte[] Template = new byte[MAX_TEMPLATE_SIZE]; int TemplateSize; // DB data byte[][] DBTemplate = null; int[] DBTemplateSize = null; int[] DBSerial = null; int DBTemplateNum; // int MatchIndex; ufd_res = m_Database.GetTemplateListWithSerial(out DBTemplate, out DBTemplateSize, out DBTemplateNum, out DBSerial); if (ufd_res != UFD_STATUS.OK) { UFDatabase.GetErrorString(ufd_res, out m_strError); tbxMessage.AppendText("UFD_GetTemplateListWithSerial: " + m_strError + "\r\n"); return; } if (!ExtractTemplate(Template, out TemplateSize)) { return; } DrawCapturedImage(m_Scanner); Cursor.Current = Cursors.WaitCursor; ufm_res = m_Matcher.Identify(Template, TemplateSize, DBTemplate, DBTemplateSize, DBTemplateNum, 5000, out MatchIndex); Cursor.Current = this.Cursor; if (ufm_res != UFM_STATUS.OK) { UFMatcher.GetErrorString(ufm_res, out m_strError); tbxMessage.AppendText("UFMatcher Identify: " + m_strError + "\r\n"); return; } if (MatchIndex != -1) { tbxMessage.AppendText("Identification succeed (Serial = " + DBSerial[MatchIndex] + ")\r\n"); } else { tbxMessage.AppendText("Identification failed\r\n"); } }
public SupremaFingerPrint() { m_ScannerManager = new UFScannerManager(new ScannerManager()); // Set timeout for capturing images to 5 seconds m_Scanner = null; m_Database = null; m_Matcher = null; m_Template1 = new byte[MAX_TEMPLATE_SIZE]; m_Template2 = new byte[MAX_TEMPLATE_SIZE]; }
private void UFE30_DatabaseDemo_Load(object sender, EventArgs e) { m_ScannerManager = new UFScannerManager(this); m_Scanner = null; m_Database = null; m_Matcher = null; m_Template1 = new byte[MAX_TEMPLATE_SIZE]; m_Template2 = new byte[MAX_TEMPLATE_SIZE]; lvDatabaseList.Columns.Add("Serial", 50, HorizontalAlignment.Left); lvDatabaseList.Columns.Add("UserID", 60, HorizontalAlignment.Left); lvDatabaseList.Columns.Add("FingerIndex", 80, HorizontalAlignment.Left); lvDatabaseList.Columns.Add("Template1", 80, HorizontalAlignment.Left); lvDatabaseList.Columns.Add("Template2", 80, HorizontalAlignment.Left); lvDatabaseList.Columns.Add("Memo", 60, HorizontalAlignment.Left); }
private void btnIdentify_Click(object sender, EventArgs e) { UFScanner Scanner; UFS_STATUS ufs_res; UFM_STATUS ufm_res; byte[] Template = new byte[MAX_TEMPLATE_SIZE]; int TemplateSize; int EnrollQuality; int MatchIndex; if (!GetGetCurrentScanner(out Scanner)) { return; } Scanner.ClearCaptureImageBuffer(); tbxMessage.AppendText("Place Finger\r\n"); ufs_res = Scanner.CaptureSingleImage(); if (ufs_res != UFS_STATUS.OK) { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner CaptureSingleImage: " + m_strError + "\r\n"); return; } switch (this.cbScanTemplateType.SelectedIndex) { case 0: Scanner.nTemplateType = 2001; break; case 1: Scanner.nTemplateType = 2002; break; case 2: Scanner.nTemplateType = 2003; break; } ufs_res = Scanner.Extract(Template, out TemplateSize, out EnrollQuality); if (ufs_res == UFS_STATUS.OK) { DrawCapturedImage(Scanner); } else { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner Extract: " + m_strError + "\r\n"); return; } switch (this.cbMatchTemplateType.SelectedIndex) { case 0: m_Matcher.nTemplateType = 2001; break; case 1: m_Matcher.nTemplateType = 2002; break; case 2: m_Matcher.nTemplateType = 2003; break; } Cursor.Current = Cursors.WaitCursor; //* ufm_res = m_Matcher.Identify(Template, TemplateSize, m_template, m_template_size, m_template_num, 5000, out MatchIndex); //ufm_res = m_Matcher.IdentifyMT(Template, TemplateSize, m_template, m_template_size, m_template_num, 5000, out MatchIndex); /*/ * { * byte[,] Template2 = new byte[m_template_num, MAX_TEMPLATE_SIZE]; * int i, j; * for (j = 0; j < m_template_num; j++) { * for (i = 0; i < m_template_size[j]; i++) { * Template2[j,i] = m_template[j][i]; * } * } * ufm_res = m_Matcher.Identify(Template, TemplateSize, m_template, m_template_size, m_template_num, 5000, out MatchIndex); * } * //*/ Cursor.Current = this.Cursor; if (ufm_res != UFM_STATUS.OK) { UFMatcher.GetErrorString(ufm_res, out m_strError); tbxMessage.AppendText("UFMatcher Identify: " + m_strError + "\r\n"); return; } if (MatchIndex != -1) { tbxMessage.AppendText("Identification succeed (No." + (MatchIndex + 1) + ")\r\n"); } else { tbxMessage.AppendText("Identification failed\r\n"); } }
private void btnVerify_Click(object sender, EventArgs e) { UFScanner Scanner; UFS_STATUS ufs_res; UFM_STATUS ufm_res; byte[] Template = new byte[MAX_TEMPLATE_SIZE]; int TemplateSize; int EnrollQuality; bool VerifySucceed; int SelectID; SelectID = cbID.SelectedIndex; if (SelectID == -1) { tbxMessage.AppendText("Select Enroll ID\r\n"); return; } if (!GetGetCurrentScanner(out Scanner)) { return; } Scanner.ClearCaptureImageBuffer(); tbxMessage.AppendText("Place Finger\r\n"); ufs_res = Scanner.CaptureSingleImage(); if (ufs_res != UFS_STATUS.OK) { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner CaptureSingleImage: " + m_strError + "\r\n"); return; } switch (this.cbScanTemplateType.SelectedIndex) { case 0: Scanner.nTemplateType = 2001; break; case 1: Scanner.nTemplateType = 2002; break; case 2: Scanner.nTemplateType = 2003; break; } ufs_res = Scanner.Extract(Template, out TemplateSize, out EnrollQuality); if (ufs_res == UFS_STATUS.OK) { DrawCapturedImage(Scanner); } else { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner Extract: " + m_strError + "\r\n"); return; } switch (this.cbMatchTemplateType.SelectedIndex) { case 0: m_Matcher.nTemplateType = 2001; break; case 1: m_Matcher.nTemplateType = 2002; break; case 2: m_Matcher.nTemplateType = 2003; break; } ufm_res = m_Matcher.Verify(Template, TemplateSize, m_template[SelectID], m_template_size[SelectID], out VerifySucceed); if (ufm_res != UFM_STATUS.OK) { UFMatcher.GetErrorString(ufm_res, out m_strError); tbxMessage.AppendText("UFMatcher Verify: " + m_strError + "\r\n"); return; } if (VerifySucceed) { tbxMessage.AppendText("Verification succeed (No." + (SelectID + 1) + ")\r\n"); } else { tbxMessage.AppendText("Verification failed\r\n"); } }
private void btnIdentify_Click(object sender, EventArgs e) { UFScanner Scanner; UFS_STATUS ufs_res; UFM_STATUS ufm_res; byte[] Template = new byte[MAX_TEMPLATE_SIZE]; int TemplateSize; int EnrollQuality; int MatchIndex; byte[][] template_all; int[] templateSize_all; int[] nindex; int i, j = 0, nMaxTemplateNum = 0; template_all = new byte[MAX_TEMPLATE_NUM * 2][]; templateSize_all = new int[MAX_TEMPLATE_NUM * 2]; nindex = new int[MAX_TEMPLATE_NUM * 2]; for (i = 0; i < m_template_num * 2; i++) { template_all[i] = new byte[MAX_TEMPLATE_SIZE]; templateSize_all[i] = 0; } for (i = 0; i < m_template_num * 2; i++) { if (i < m_template_num) { if (m_template_size1[i] != 0) { System.Array.Copy(m_template1[i], 0, template_all[j], 0, m_template_size1[i]); templateSize_all[j] = m_template_size1[i]; nindex[j] = i; j++; } } else { if (m_template_size2[i - m_template_num] != 0) { System.Array.Copy(m_template2[i - m_template_num], 0, template_all[j], 0, m_template_size2[i - m_template_num]); templateSize_all[j] = m_template_size2[i - m_template_num]; nindex[j] = i - m_template_num; j++; } } } nMaxTemplateNum = j; if (!GetGetCurrentScanner(out Scanner)) { return; } Scanner.ClearCaptureImageBuffer(); tbxMessage.AppendText("Place Finger\r\n"); ufs_res = Scanner.CaptureSingleImage(); if (ufs_res != UFS_STATUS.OK) { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner CaptureSingleImage: " + m_strError + "\r\n"); return; } switch (this.cbScanTemplateType.SelectedIndex) { case 0: Scanner.nTemplateType = 2001; break; case 1: Scanner.nTemplateType = 2002; break; case 2: Scanner.nTemplateType = 2003; break; } ufs_res = Scanner.ExtractEx(MAX_TEMPLATE_SIZE, Template, out TemplateSize, out EnrollQuality); if (ufs_res == UFS_STATUS.OK) { DrawCapturedImage(Scanner); } else { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner ExtractEx: " + m_strError + "\r\n"); return; } switch (this.cbScanTemplateType.SelectedIndex) { case 0: m_Matcher.nTemplateType = 2001; break; case 1: m_Matcher.nTemplateType = 2002; break; case 2: m_Matcher.nTemplateType = 2003; break; } Cursor.Current = Cursors.WaitCursor; //* ufm_res = m_Matcher.Identify(Template, TemplateSize, template_all, templateSize_all, nMaxTemplateNum, 5000, out MatchIndex); //ufm_res = m_Matcher.IdentifyMT(Template, TemplateSize, template_all, templateSize_all, nMaxTemplateNum, 5000, out MatchIndex); /*/ * { * byte[,] Template2 = new byte[m_template_num, MAX_TEMPLATE_SIZE]; * int i, j; * for (j = 0; j < m_template_num; j++) { * for (i = 0; i < m_template_size[j]; i++) { * Template2[j,i] = m_template[j][i]; * } * } * ufm_res = m_Matcher.Identify(Template, TemplateSize, m_template, m_template_size, m_template_num, 5000, out MatchIndex); * } * //*/ Cursor.Current = this.Cursor; if (ufm_res != UFM_STATUS.OK) { UFMatcher.GetErrorString(ufm_res, out m_strError); tbxMessage.AppendText("UFMatcher Identify: " + m_strError + "\r\n"); return; } if (MatchIndex != -1) { tbxMessage.AppendText("Identification succeed (Match Index." + MatchIndex + ") (Match Serial." + nindex[MatchIndex] % nMaxTemplateNum + ") (ID." + m_UserID[nindex[MatchIndex]] + ")\r\n"); } else { tbxMessage.AppendText("Identification failed\r\n"); } }
private void btnVerify_Click(object sender, EventArgs e) { UFScanner Scanner; UFS_STATUS ufs_res; UFM_STATUS ufm_res; byte[] Template = new byte[MAX_TEMPLATE_SIZE]; int TemplateSize; int EnrollQuality; bool VerifySucceed; int Serial; if (lvFingerDataList.SelectedIndices.Count == 0) { tbxMessage.AppendText("Select data\r\n"); return; } else { Serial = Convert.ToInt32(lvFingerDataList.SelectedItems[0].SubItems[FINGERDATA_COL_SERIAL].Text); } if (!GetGetCurrentScanner(out Scanner)) { return; } tbxMessage.AppendText("Verify with serial: " + Serial + "\r\n"); Scanner.ClearCaptureImageBuffer(); tbxMessage.AppendText("Place Finger\r\n"); ufs_res = Scanner.CaptureSingleImage(); if (ufs_res != UFS_STATUS.OK) { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner CaptureSingleImage: " + m_strError + "\r\n"); return; } switch (this.cbScanTemplateType.SelectedIndex) { case 0: Scanner.nTemplateType = 2001; break; case 1: Scanner.nTemplateType = 2002; break; case 2: Scanner.nTemplateType = 2003; break; } ufs_res = Scanner.ExtractEx(MAX_TEMPLATE_SIZE, Template, out TemplateSize, out EnrollQuality); if (ufs_res == UFS_STATUS.OK) { DrawCapturedImage(Scanner); } else { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner ExtractEx: " + m_strError + "\r\n"); return; } switch (this.cbScanTemplateType.SelectedIndex) { case 0: m_Matcher.nTemplateType = 2001; break; case 1: m_Matcher.nTemplateType = 2002; break; case 2: m_Matcher.nTemplateType = 2003; break; } ufm_res = m_Matcher.Verify(Template, TemplateSize, m_template1[Serial], m_template_size1[Serial], out VerifySucceed); if (ufm_res != UFM_STATUS.OK) { UFMatcher.GetErrorString(ufm_res, out m_strError); tbxMessage.AppendText("UFMatcher Verify: " + m_strError + "\r\n"); return; } if (VerifySucceed) { tbxMessage.AppendText("Verification succeed (Serial." + Serial + ") (ID." + m_UserID[Serial] + ")\r\n"); } else { if (m_template_size2[Serial] != 0) { ufm_res = m_Matcher.Verify(Template, TemplateSize, m_template2[Serial], m_template_size2[Serial], out VerifySucceed); if (ufm_res != UFM_STATUS.OK) { UFMatcher.GetErrorString(ufm_res, out m_strError); tbxMessage.AppendText("UFMatcher Verify: " + m_strError + "\r\n"); return; } if (VerifySucceed) { tbxMessage.AppendText("Verification succeed (Serial." + Serial + ") (ID." + m_UserID[Serial] + ")\r\n"); } else { tbxMessage.AppendText("Verification failed\r\n"); } } else { tbxMessage.AppendText("Verification failed\r\n"); } } }
//=========================================================================// //=========================================================================// private void btnInit_Click(object sender, EventArgs e) { //=========================================================================// // Initilize scanners //=========================================================================// UFS_STATUS ufs_res; int nScannerNumber; Cursor.Current = Cursors.WaitCursor; ufs_res = m_ScannerManager.Init(); Cursor.Current = this.Cursor; if (ufs_res == UFS_STATUS.OK) { tbxMessage.AppendText("UFScanner Init: OK\r\n"); } else { UFScanner.GetErrorString(ufs_res, out m_strError); tbxMessage.AppendText("UFScanner Init: " + m_strError + "\r\n"); return; } nScannerNumber = m_ScannerManager.Scanners.Count; tbxMessage.AppendText("UFScanner GetScannerNumber: " + nScannerNumber + "\r\n"); if (nScannerNumber == 0) { tbxMessage.AppendText("There's no available scanner\r\n"); return; } else { tbxMessage.AppendText("First scanner will be used\r\n"); } m_Scanner = m_ScannerManager.Scanners[0]; //=========================================================================// //=========================================================================// // Open database //=========================================================================// UFD_STATUS ufd_res; m_Database = new UFDatabase(); // Generate connection string string szDataSource; string szConnection; /* * szDataSource = "UFDatabase.mdb"; * /*/ tbxMessage.AppendText("Select a database file\r\n"); OpenFileDialog dlg = new OpenFileDialog(); dlg.FileName = "UFDatabase.mdb"; dlg.Filter = "Database Files (*.mdb)|*.mdb"; dlg.DefaultExt = "mdb"; DialogResult res = dlg.ShowDialog(); if (res != DialogResult.OK) { return; } szDataSource = dlg.FileName; //*/ szConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + szDataSource + ";"; ufd_res = m_Database.Open(szConnection, null, null); if (ufd_res == UFD_STATUS.OK) { tbxMessage.AppendText("UFDatabase Open: OK\r\n"); } else { UFDatabase.GetErrorString(ufd_res, out m_strError); tbxMessage.AppendText("UFDatabase Open: " + m_strError + "\r\n"); return; } UpdateDatabaseList(); //=========================================================================// //=========================================================================// // Create matcher //=========================================================================// m_Matcher = new UFMatcher(); if (m_Matcher.InitResult == UFM_STATUS.OK) { tbxMessage.AppendText("UFMatcher Init: OK\r\n"); } else { UFMatcher.GetErrorString(m_Matcher.InitResult, out m_strError); tbxMessage.AppendText("UFMatcher Init: " + m_strError + "\r\n"); } //=========================================================================// cbScanTemplateType.SelectedIndex = 0; }
public string GetCardID() { try { Log("Start Get Card ID"); byte[][] DBTemplate = null; int[] DBTemplateSize = null; int[] DBSerial = null; int DBTemplateNum; int nMatchIndex; // Initialize scanners UFS_STATUS ufs_res = new UFS_STATUS(); int nScannerNumber; ufs_res = m_ScannerManager.Init(); nScannerNumber = m_ScannerManager.Scanners.Count; if (nScannerNumber <= 0) { strLastError = "There are no suprema scanner"; Log(strLastError); return(""); } m_Scanner = m_ScannerManager.Scanners[0]; // Database m_Database = new UFDatabase(); if (m_szConnectionString != null) { m_ufd_res = m_Database.Open(m_szConnectionString, "", ""); } // Create matcher m_Matcher = new UFMatcher(); if (!ExtractTemplate(m_bTemplate1, out m_nTemplateSize1)) { m_ScannerManager.Uninit(); m_Database.Close(); return(""); } m_ScannerManager.Uninit(); //Identify loyee fingerprint :GetTemplateListWithSerial m_ufd_res = m_Database.GetTemplateListWithSerial(out DBTemplate, out DBTemplateSize, out DBTemplateNum, out DBSerial); //Identify employee fingerprint :Identify m_ufm_res = m_Matcher.Identify(m_bTemplate1, m_nTemplateSize1, DBTemplate, DBTemplateSize, DBTemplateNum, 5000, out nMatchIndex); string m_strUserID = ""; int m_nFingerIndex = 0; string memo = ""; int x = 0; if (nMatchIndex >= 0 && DBSerial != null) { m_ufd_res = m_Database.GetDataBySerial(DBSerial[nMatchIndex], out m_strUserID, out m_nFingerIndex, m_bTemplate1, out m_nTemplateSize1, null, out x, out memo); } else { m_strUserID = ""; } if (m_ufm_res != UFM_STATUS.OK) { return(""); } Log(m_strUserID.Replace('\0', ' ').Trim()); return(m_strUserID.Replace('\0', ' ').Trim()); } catch (Exception ex) { strLastError = "Unkown Error Happened:\n" + ex.Message; Log(strLastError); return(""); } }
public bool Enroll(string nUserID, string strUserName, int FingerIndex = 1) { bool bRet = false; try { //ErrorMessage = ""; UFS_STATUS ufs_status; int nScannerNumber; ufs_status = m_ScannerManager.Init(); nScannerNumber = m_ScannerManager.Scanners.Count; if (nScannerNumber <= 0) { strLastError = "There are no suprema scanner"; Log(strLastError); return(false); } m_Scanner = m_ScannerManager.Scanners[0]; // Open database m_Database = new UFDatabase(); //string szDataSource; if (m_szConnectionString != string.Empty) { m_ufd_res = m_Database.Open(m_szConnectionString, "", ""); } else { return(false); } if (m_ufd_res != UFD_STATUS.OK) { return(false); } // Create matcher m_Matcher = new UFMatcher(); if (!ExtractTemplate(m_bTemplate1, out m_nTemplateSize1)) { return(false); } m_ScannerManager.Uninit(); #region Check if the finger is used before for other user byte[][] DBTemplate = null; int[] DBTemplateSize = null; int[] DBSerial = null; int DBTemplateNum; int nMatchIndex; string m_strUserID = ""; int m_nFingerIndex = 0; string memo = ""; int x = 0; m_ufd_res = m_Database.GetTemplateListWithSerial(out DBTemplate, out DBTemplateSize, out DBTemplateNum, out DBSerial); m_ufm_res = m_Matcher.Identify(m_bTemplate1, m_nTemplateSize1, DBTemplate, DBTemplateSize, DBTemplateNum, 5000, out nMatchIndex); if (nMatchIndex >= 0 && DBSerial != null) { m_ufd_res = m_Database.GetDataBySerial(DBSerial[nMatchIndex], out m_strUserID, out m_nFingerIndex, m_bTemplate1, out m_nTemplateSize1, null, out x, out memo); if (m_strUserID.Replace('\0', ' ').Trim() != nUserID && m_nFingerIndex == FingerIndex) { strLastError = "This fingerprint is used for another person"; Log(strLastError); return(false); } } #endregion m_ufd_res = m_Database.AddData(nUserID.ToString(), FingerIndex, m_bTemplate1, m_nTemplateSize1, null, 0, ""); if (m_ufd_res == UFD_STATUS.OK) { bRet = true; } else if (m_ufd_res == UFD_STATUS.ERR_SAME_FINGER_EXIST) { m_ufd_res = m_Database.UpdateDataByUserInfo(nUserID, FingerIndex, m_bTemplate1, m_nTemplateSize1, null, 0, null); if (m_ufd_res == UFD_STATUS.OK) { bRet = true; } } } catch (Exception ex) { strLastError = "Unkown Error Happened:\n" + ex.Message; Log(strLastError); } return(bRet); }