none
Exemplo C# para Digital Persona U.are.U 4000B Reader. RRS feed

  • Pergunta

  • Boa tarde,

    Preciso criar uma solução desktop simples para realizar leitura biométrica e estou utilizando o dispositivo "Digital Persona U.are.U 4000B Reader", porém não estou encontrando nenhum exemplo na internet.

    Já instalei o driver do dispositivo no meu computador, não sei qual são as dlls que preciso utilizar.

    Alguém tem algum exemplo de como realizar essa leitura? Ou então quais são as dlls que preciso adicionar para continuar a solução?

    Obrigado.

    quarta-feira, 28 de janeiro de 2015 18:50

Respostas

  • A sdk de desenvolvimento dessa marca é paga, portanto a empresa irá verificar se compra a licença ou troca o leitor.

    Obrigado pela ajuda.

    • Marcado como Resposta Rafael_CC sexta-feira, 6 de fevereiro de 2015 11:14
    sexta-feira, 6 de fevereiro de 2015 11:14

Todas as Respostas

  • Rafael boa noite,

    Esse aparelho acompanha alguma mídia ou coisa do tipo ? Por que nos casos em que trabalhei com leitores biométricos assim a própria fabricante fornecia o SDK, DLLs e etc que era necessários, além de algumas demos (simples mas que ajudavam). O que você pode fazer é olhar também dentro do diretório de instalação do driver se não há nenhuma DLL ou coisa do gênero e tentar adicionar ao projeto e "fuçar" nas classes.

    Att.


    Guilherme Silva Cardoso

    quarta-feira, 28 de janeiro de 2015 21:23
  • Rafael boa noite,

    Esse aparelho acompanha alguma mídia ou coisa do tipo ? Por que nos casos em que trabalhei com leitores biométricos assim a própria fabricante fornecia o SDK, DLLs e etc que era necessários, além de algumas demos (simples mas que ajudavam). O que você pode fazer é olhar também dentro do diretório de instalação do driver se não há nenhuma DLL ou coisa do gênero e tentar adicionar ao projeto e "fuçar" nas classes.

    Att.


    Guilherme Silva Cardoso

    Bom dia Guilherme,

    Junto com o dispositivo veio um DVD, nele veio o driver de instalação e um exemplo em C++, porém vou precisar desenvolver em C#. Ao instalar o dispositivo, ele adicionou várias dll's no C:Arquivos de Programas\Digital Person\bin. Conforme a imagem abaixo:

    Vou ir adicionando elas individualmente para tentar realizar a leitura. No site da empresa eles cobram pela SDK.

    Quando tiver um projeto pronto eu posto aqui.

    Obrigado.

    quinta-feira, 29 de janeiro de 2015 10:27
  • A sdk de desenvolvimento dessa marca é paga, portanto a empresa irá verificar se compra a licença ou troca o leitor.

    Obrigado pela ajuda.

    • Marcado como Resposta Rafael_CC sexta-feira, 6 de fevereiro de 2015 11:14
    sexta-feira, 6 de fevereiro de 2015 11:14
  • Oi Rafael

    Estou passando pela mesma dificuldade. Você consegui implementar? poderia me dar umas dicas?

    Desde já agradeço.

    domingo, 7 de junho de 2015 01:57
  • Oi Rafael

    Estou passando pela mesma dificuldade. Você consegui implementar? poderia me dar umas dicas?

    Desde já agradeço.

    Bom dia Fábio, desculpa a demora em responder.

    O cliente acabou trocando o leitor para uma outra marca, a SDK de desenvolvimento desse leitor é pago.

    Utilizamos o Nitgen HFDU006 (FingerTech), para esse segue código abaixo para abertura, consulta e gravação da digital. Nesse, a SDK é gratuita:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using MettaGeral;
    using NITGEN.SDK.NBioBSP;
    
    namespace MettaCSC
    {
    	public class LeitorBiometrico
    	{
    		public static long id_colab;
    
    		NBioAPI m_NBioAPI;
    		NBioAPI.IndexSearch m_IndexSearch;			
    		NBioAPI.Type.FIR_TEXTENCODE m_textFIR;	
    
    		NBioAPI.Type.WINDOW_OPTION m_WinOption;
    
    		public LeitorBiometrico()
    		{					
    			// Create NBioBSP object
    			m_NBioAPI = new NBioAPI();
    			m_IndexSearch = new NBioAPI.IndexSearch(m_NBioAPI);
    
    			uint ret = m_IndexSearch.InitEngine();
    			if (ret != NBioAPI.Error.NONE)
    			{
    				DisplayErrorMsg(ret);
    			}
    
    			NBioAPI.Type.VERSION version = new NBioAPI.Type.VERSION();
    			m_NBioAPI.GetVersion(out version);
    
    			m_WinOption = new NBioAPI.Type.WINDOW_OPTION();
    			m_WinOption.Option2 = new NBioAPI.Type.WINDOW_OPTION_2();
    		}                
    
    		public string GravaDigital(int id_finger)
    		{                                                    
    			NBioAPI.Type.HFIR hNewFIR;
    			string digital = "";               
    
    			m_WinOption.WindowStyle = NBioAPI.Type.WINDOW_STYLE.POPUP;
    
    			m_WinOption.Option2.DisableFingerForEnroll[0] = (byte)((id_finger == 0) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[1] = (byte)((id_finger == 2) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[2] = (byte)((id_finger == 4) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[3] = (byte)((id_finger == 6) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[4] = (byte)((id_finger == 8) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[5] = (byte)((id_finger == 1) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[6] = (byte)((id_finger == 3) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[7] = (byte)((id_finger == 5) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[8] = (byte)((id_finger == 7) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[9] = (byte)((id_finger == 9) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);	               
    
    			// abre dispositivo
    			m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    			// get FIR data              
    			uint ret = m_NBioAPI.Enroll(null, out hNewFIR, null, NBioAPI.Type.TIMEOUT.DEFAULT, null, m_WinOption);
    			if (ret != NBioAPI.Error.NONE)
    			{
    				DisplayErrorMsg(ret);
    				m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    				return "";
    			}
    
    			m_NBioAPI.GetTextFIRFromHandle(hNewFIR, out m_textFIR, true);
    
    			digital = m_textFIR.TextFIR.ToString();
    
    			// fecha dispositivo
    			m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);                                                                                                                                         
    
    			return digital;
    		}
    
    
    		public uint myCallback(ref NBioAPI.IndexSearch.CALLBACK_PARAM_0 cbParam0, IntPtr userParam)
    		{
    			return NBioAPI.IndexSearch.CALLBACK_RETURN.OK;
    		}
    
    		public bool VerificaDigital()
    		{
    			try
    			{
    				AbrirArquivo();
    				NBioAPI.Type.HFIR hCapturedFIR;
    
    				// Abre dispositivo e captura a digital.
    				m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    				uint ret = m_NBioAPI.Capture(out hCapturedFIR);
    				if (ret != NBioAPI.Error.NONE)
    				{
    					DisplayErrorMsg(ret);
    					m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    					return false;
    				}
    
    				// Fecha Dispositivo.
    				m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    
    				uint nMax;
    				m_IndexSearch.GetDataCount(out nMax);
    
    				NBioAPI.IndexSearch.CALLBACK_INFO_0 cbInfo0 = new NBioAPI.IndexSearch.CALLBACK_INFO_0();
    				cbInfo0.CallBackFunction = new NBioAPI.IndexSearch.INDEXSEARCH_CALLBACK(myCallback);
    
    				// Identify FIR to IndexSearch DB
    				NBioAPI.IndexSearch.FP_INFO fpInfo;
    				ret = m_IndexSearch.IdentifyData(hCapturedFIR, RetornaNivelSeguranca(Parametros.GetParam(3, "08")), out fpInfo, cbInfo0);
    				if (ret != NBioAPI.Error.NONE)
    				{
    					DisplayErrorMsg(ret);
    					return false;
    				}
    
    				id_colab = fpInfo.ID;
    				return true;
    			}
    			catch (Exception ex)
    			{
    				throw new Exception(ex.Message);
    			}
    		}
    
    		/// <summary>
    		/// Método para retornar o valor do nível de segurança
    		/// </summary>
    		/// <param name="p">Valor retornado do parâmetro</param>
    		/// <returns>Valor no nível de segurança</returns>
    		private uint RetornaNivelSeguranca(string p)
    		{
    			uint valorRetorno = 0;
    
    			switch (p)
    			{
    				case "1":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOWEST;
    				break;
    				case "2":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOWER;
    				break;
    				case "3":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOW;
    				break;
    				case "4":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.BELOW_NORMAL;
    				break;
    				case "5":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.NORMAL;
    				break;
    				case "6":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.ABOVE_NORMAL;
    				break;
    				case "7":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGH;
    				break;
    				case "8":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGHER;
    				break;
    				case "9":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGHEST;
    				break;
    				default:
    				valorRetorno = 0;
    				break;
    			}
    
    			return valorRetorno;
    		}
    
    		public void GerarArquivoDigital()
    		{
    			// declarações de variaveis locais
    			long id_dig;				
    			NBioAPI.Type.FIR_TEXTENCODE chave_dig = new NBioAPI.Type.FIR_TEXTENCODE();
    			DataSet dsTemp = new DataSet();
    			DataTable dtTemp = new DataTable();
    			try
    			{
    				// limpa a base de dados do leitor
    				m_IndexSearch.ClearDB();
    				Global.sSql.Remove(0, Global.sSql.Length);
    				Global.sSql.Append(" select * from colab_digitais where cld_desabilitado = 'N' order by cld_id_colab_digitais ");
    				dsTemp = LDataAccess.GetDataSet(Global.sSql.ToString());
    				dtTemp = dsTemp.Tables[0];
    				if (dtTemp.Rows.Count == 0)
    				{														
    					return;
    				}						
    				// faz um laco no datarow ate o fim dos registro
    				foreach (DataRow dr in dtTemp.Rows)
    				{
    					id_dig = ValidaDados.ParseReq<long>(dr["cld_id_colab_digitais"]);																
    
    					if (ValidaDados.Parse(dr["cld_polegar_dir_0"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_polegar_dir_0"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_polegar_esq_1"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_polegar_esq_1"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_indicador_dir_2"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_indicador_dir_2"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_indicador_esq_3"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_indicador_esq_3"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_medio_dir_4"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_medio_dir_4"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_medio_esq_5"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_medio_esq_5"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_anelar_dir_6"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_anelar_dir_6"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_anelar_esq_7"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_anelar_esq_7"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_minimo_dir_8"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_minimo_dir_8"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_minimo_esq_9"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_minimo_esq_9"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    				}
    				//realiza a gravação do arquivos com a base de digitais
    				string szFileName = Parametros.GetParam(3, "09") + "digitais.ISDB";
    				if (System.IO.File.Exists(szFileName))
    				{
    					System.IO.File.Delete(szFileName);
    				}
    				uint ret = m_IndexSearch.SaveDBToFile(szFileName);
    				if (ret != NBioAPI.Error.NONE) 
    				{
    					DisplayErrorMsg(ret);
    					return;
    				}
    
    				return;
    			}
    			catch (Exception exp)
    			{
    				ConstEngebuilder.MessageError(ConstEngebuilder.erroGravar, ConstEngebuilder.erro, exp.Message, "", "");
    				return;      				
    			}
    		}
    
    		public void AbrirArquivo()
    		{				
    			//realiza a gravação do arquivos com a base de digitais
    			string szFileName = Parametros.GetParam(3, "09") + "digitais.ISDB";
    			if (!(System.IO.File.Exists(szFileName)))
    			{
    				ConstEngebuilder.MessageInformation("Arquivo ISDB não Encontrado!", "", "", "", "");
    			}
    
    			// Clear IndexSearchDB
    			m_IndexSearch.ClearDB();
    
    			// Load SearchDB from File
    			uint ret = m_IndexSearch.LoadDBFromFile(szFileName);
    			if (ret != NBioAPI.Error.NONE) 
    			{
    				DisplayErrorMsg(ret);
    				return;
    			}
    		}
    
    		private bool AdicionaDigital(NBioAPI.Type.FIR_TEXTENCODE chave_dig, uint id_dig)
    		{
    			NBioAPI.IndexSearch.FP_INFO[] fpInfo;
    			uint ret = m_IndexSearch.AddFIR(chave_dig, id_dig, out fpInfo);
    			if (ret != NBioAPI.Error.NONE)
    			{
    				DisplayErrorMsg(ret);
    				return false;
    			}
    			return true;
    		}
    
    	}
    }

    Espero que de alguma forma consiga ajudar.

    segunda-feira, 8 de junho de 2015 13:29
  • Hello Friend how are you? I wrote to you to consult you, how can I do to extract the data of each fingerprint separately, that is, the fingerprint of the right thumb, the fingerprint of the right index finger, and so on.
    sexta-feira, 24 de agosto de 2018 16:05
  • Oi Rafael

    Estou passando pela mesma dificuldade. Você consegui implementar? poderia me dar umas dicas?

    Desde já agradeço.

    Bom dia Fábio, desculpa a demora em responder.

    O cliente acabou trocando o leitor para uma outra marca, a SDK de desenvolvimento desse leitor é pago.

    Utilizamos o Nitgen HFDU006 (FingerTech), para esse segue código abaixo para abertura, consulta e gravação da digital. Nesse, a SDK é gratuita:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using MettaGeral;
    using NITGEN.SDK.NBioBSP;
    
    namespace MettaCSC
    {
    	public class LeitorBiometrico
    	{
    		public static long id_colab;
    
    		NBioAPI m_NBioAPI;
    		NBioAPI.IndexSearch m_IndexSearch;			
    		NBioAPI.Type.FIR_TEXTENCODE m_textFIR;	
    
    		NBioAPI.Type.WINDOW_OPTION m_WinOption;
    
    		public LeitorBiometrico()
    		{					
    			// Create NBioBSP object
    			m_NBioAPI = new NBioAPI();
    			m_IndexSearch = new NBioAPI.IndexSearch(m_NBioAPI);
    
    			uint ret = m_IndexSearch.InitEngine();
    			if (ret != NBioAPI.Error.NONE)
    			{
    				DisplayErrorMsg(ret);
    			}
    
    			NBioAPI.Type.VERSION version = new NBioAPI.Type.VERSION();
    			m_NBioAPI.GetVersion(out version);
    
    			m_WinOption = new NBioAPI.Type.WINDOW_OPTION();
    			m_WinOption.Option2 = new NBioAPI.Type.WINDOW_OPTION_2();
    		}                
    
    		public string GravaDigital(int id_finger)
    		{                                                    
    			NBioAPI.Type.HFIR hNewFIR;
    			string digital = "";               
    
    			m_WinOption.WindowStyle = NBioAPI.Type.WINDOW_STYLE.POPUP;
    
    			m_WinOption.Option2.DisableFingerForEnroll[0] = (byte)((id_finger == 0) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[1] = (byte)((id_finger == 2) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[2] = (byte)((id_finger == 4) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[3] = (byte)((id_finger == 6) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[4] = (byte)((id_finger == 8) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[5] = (byte)((id_finger == 1) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[6] = (byte)((id_finger == 3) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[7] = (byte)((id_finger == 5) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[8] = (byte)((id_finger == 7) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);
    			m_WinOption.Option2.DisableFingerForEnroll[9] = (byte)((id_finger == 9) ? NBioAPI.Type.FALSE : NBioAPI.Type.TRUE);	               
    
    			// abre dispositivo
    			m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    			// get FIR data              
    			uint ret = m_NBioAPI.Enroll(null, out hNewFIR, null, NBioAPI.Type.TIMEOUT.DEFAULT, null, m_WinOption);
    			if (ret != NBioAPI.Error.NONE)
    			{
    				DisplayErrorMsg(ret);
    				m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    				return "";
    			}
    
    			m_NBioAPI.GetTextFIRFromHandle(hNewFIR, out m_textFIR, true);
    
    			digital = m_textFIR.TextFIR.ToString();
    
    			// fecha dispositivo
    			m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);                                                                                                                                         
    
    			return digital;
    		}
    
    
    		public uint myCallback(ref NBioAPI.IndexSearch.CALLBACK_PARAM_0 cbParam0, IntPtr userParam)
    		{
    			return NBioAPI.IndexSearch.CALLBACK_RETURN.OK;
    		}
    
    		public bool VerificaDigital()
    		{
    			try
    			{
    				AbrirArquivo();
    				NBioAPI.Type.HFIR hCapturedFIR;
    
    				// Abre dispositivo e captura a digital.
    				m_NBioAPI.OpenDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    				uint ret = m_NBioAPI.Capture(out hCapturedFIR);
    				if (ret != NBioAPI.Error.NONE)
    				{
    					DisplayErrorMsg(ret);
    					m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    					return false;
    				}
    
    				// Fecha Dispositivo.
    				m_NBioAPI.CloseDevice(NBioAPI.Type.DEVICE_ID.AUTO);
    
    				uint nMax;
    				m_IndexSearch.GetDataCount(out nMax);
    
    				NBioAPI.IndexSearch.CALLBACK_INFO_0 cbInfo0 = new NBioAPI.IndexSearch.CALLBACK_INFO_0();
    				cbInfo0.CallBackFunction = new NBioAPI.IndexSearch.INDEXSEARCH_CALLBACK(myCallback);
    
    				// Identify FIR to IndexSearch DB
    				NBioAPI.IndexSearch.FP_INFO fpInfo;
    				ret = m_IndexSearch.IdentifyData(hCapturedFIR, RetornaNivelSeguranca(Parametros.GetParam(3, "08")), out fpInfo, cbInfo0);
    				if (ret != NBioAPI.Error.NONE)
    				{
    					DisplayErrorMsg(ret);
    					return false;
    				}
    
    				id_colab = fpInfo.ID;
    				return true;
    			}
    			catch (Exception ex)
    			{
    				throw new Exception(ex.Message);
    			}
    		}
    
    		/// <summary>
    		/// Método para retornar o valor do nível de segurança
    		/// </summary>
    		/// <param name="p">Valor retornado do parâmetro</param>
    		/// <returns>Valor no nível de segurança</returns>
    		private uint RetornaNivelSeguranca(string p)
    		{
    			uint valorRetorno = 0;
    
    			switch (p)
    			{
    				case "1":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOWEST;
    				break;
    				case "2":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOWER;
    				break;
    				case "3":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.LOW;
    				break;
    				case "4":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.BELOW_NORMAL;
    				break;
    				case "5":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.NORMAL;
    				break;
    				case "6":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.ABOVE_NORMAL;
    				break;
    				case "7":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGH;
    				break;
    				case "8":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGHER;
    				break;
    				case "9":
    				valorRetorno = NBioAPI.Type.FIR_SECURITY_LEVEL.HIGHEST;
    				break;
    				default:
    				valorRetorno = 0;
    				break;
    			}
    
    			return valorRetorno;
    		}
    
    		public void GerarArquivoDigital()
    		{
    			// declarações de variaveis locais
    			long id_dig;				
    			NBioAPI.Type.FIR_TEXTENCODE chave_dig = new NBioAPI.Type.FIR_TEXTENCODE();
    			DataSet dsTemp = new DataSet();
    			DataTable dtTemp = new DataTable();
    			try
    			{
    				// limpa a base de dados do leitor
    				m_IndexSearch.ClearDB();
    				Global.sSql.Remove(0, Global.sSql.Length);
    				Global.sSql.Append(" select * from colab_digitais where cld_desabilitado = 'N' order by cld_id_colab_digitais ");
    				dsTemp = LDataAccess.GetDataSet(Global.sSql.ToString());
    				dtTemp = dsTemp.Tables[0];
    				if (dtTemp.Rows.Count == 0)
    				{														
    					return;
    				}						
    				// faz um laco no datarow ate o fim dos registro
    				foreach (DataRow dr in dtTemp.Rows)
    				{
    					id_dig = ValidaDados.ParseReq<long>(dr["cld_id_colab_digitais"]);																
    
    					if (ValidaDados.Parse(dr["cld_polegar_dir_0"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_polegar_dir_0"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_polegar_esq_1"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_polegar_esq_1"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_indicador_dir_2"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_indicador_dir_2"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_indicador_esq_3"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_indicador_esq_3"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_medio_dir_4"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_medio_dir_4"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_medio_esq_5"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_medio_esq_5"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_anelar_dir_6"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_anelar_dir_6"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_anelar_esq_7"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_anelar_esq_7"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_minimo_dir_8"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_minimo_dir_8"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    					if (ValidaDados.Parse(dr["cld_minimo_esq_9"]) != null)
    					{
    						chave_dig.TextFIR = ValidaDados.Parse(dr["cld_minimo_esq_9"]);
    						if (AdicionaDigital(chave_dig, Convert.ToUInt32(id_dig.ToString())) == false) return;
    					}
    				}
    				//realiza a gravação do arquivos com a base de digitais
    				string szFileName = Parametros.GetParam(3, "09") + "digitais.ISDB";
    				if (System.IO.File.Exists(szFileName))
    				{
    					System.IO.File.Delete(szFileName);
    				}
    				uint ret = m_IndexSearch.SaveDBToFile(szFileName);
    				if (ret != NBioAPI.Error.NONE) 
    				{
    					DisplayErrorMsg(ret);
    					return;
    				}
    
    				return;
    			}
    			catch (Exception exp)
    			{
    				ConstEngebuilder.MessageError(ConstEngebuilder.erroGravar, ConstEngebuilder.erro, exp.Message, "", "");
    				return;      				
    			}
    		}
    
    		public void AbrirArquivo()
    		{				
    			//realiza a gravação do arquivos com a base de digitais
    			string szFileName = Parametros.GetParam(3, "09") + "digitais.ISDB";
    			if (!(System.IO.File.Exists(szFileName)))
    			{
    				ConstEngebuilder.MessageInformation("Arquivo ISDB não Encontrado!", "", "", "", "");
    			}
    
    			// Clear IndexSearchDB
    			m_IndexSearch.ClearDB();
    
    			// Load SearchDB from File
    			uint ret = m_IndexSearch.LoadDBFromFile(szFileName);
    			if (ret != NBioAPI.Error.NONE) 
    			{
    				DisplayErrorMsg(ret);
    				return;
    			}
    		}
    
    		private bool AdicionaDigital(NBioAPI.Type.FIR_TEXTENCODE chave_dig, uint id_dig)
    		{
    			NBioAPI.IndexSearch.FP_INFO[] fpInfo;
    			uint ret = m_IndexSearch.AddFIR(chave_dig, id_dig, out fpInfo);
    			if (ret != NBioAPI.Error.NONE)
    			{
    				DisplayErrorMsg(ret);
    				return false;
    			}
    			return true;
    		}
    
    	}
    }

    Espero que de alguma forma consiga ajudar.

    Olá Rafael, obrigada por ter postado o código. Está sendo de grande ajuda. Gostaria de saber como é a classe Parametros. Tem como você postar ela também? Obrigada!
    quinta-feira, 8 de agosto de 2019 18:01