ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Biometria Fingkey Hamster - nitgen
Ir à página Anterior  1, 2
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Qui Ago 20, 2015 9:49 am    Assunto: Responder com Citação

up
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
jjmalka
Aprendiz
Aprendiz


Registrado: Domingo, 16 de Julho de 2006
Mensagens: 157

MensagemEnviada: Sex Ago 21, 2015 4:16 pm    Assunto: Responder com Citação

joemil escreveu:
ressuscitando o topico.
estou fazendo um novo sistema de biometria pra um cliente (o anterior nem usava mais hehehe)

a leitura ja ta funcionando normalmente, mas agora preciso q varios computadores facam a leitura, entao preciso criar algo do tipo Client/server. alg tem um link, exemplo, dica???

e tb vou precisar de algum equipamento q possa fazer a leitura biometrica de forma movel. alg conhec algum equipamento wi-fi com leitura?


Joemil, na empresa que trabalho temos um cliente/servidor/banco. A necessidade de 3 camadas foi justamente devido a quantidade de computadores acessando ao banco e organizar as pesquisas feitas no mesmo.
O que posso dizer como dica é que vc deve fazer um servidor e criar ou usar um componente que lista as solicitações para ordenar a pesquisa e inclusões, isto facilitara o trabalho e fará com que vc obtenha maior velocidade.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Strago
Novato
Novato


Registrado: Sexta-Feira, 4 de Setembro de 2015
Mensagens: 2

MensagemEnviada: Sex Set 04, 2015 3:11 pm    Assunto: Responder com Citação

Vamos em partes ...

Primeiro, sobre o código do inicio do topico.

Eu uso algo parecido, só que com threads para usar o recurso da nitgen de só ler quando detectar um dedo (que aumenta a vida util do equipamento).

uso um timer só para limpar os dados retornados pelo servidor e o handle da digital que é exibida na captura.

Segundo, sobre cadastramento (Enroll)

Sobre Nitgen, as telas padrão de cadastramento só podem ser alteradas, assim como o idioma (padrão ingles) se você desenvolver uma dll de recursos. A documentação para desenvolver essa dll pode ser solicitada a nitgen (não sei quanto a custos).

O que pode ser feito é um bypass da rotina, ao invez de usar o metodo Enroll (que chama os formlarios padrao da nitgen), você deve montar suas telas e usar os metodos de leitura passiva (INVISIBLE WINDOW), da muito trabalho e você teria que fazer o tratamento, por exemplo, o metodo enroll já fornece 10 dedos, e permite que você adicione os 10 em um único FIR, já no modelo braçal, você teria que capturar dedo a dedo e ir adicionando ao FIR, depois teria que fazer uma tela so para testar se a digital foi registrada.



Terceiro, com relação a limites de digitais da nitgen.

A principio ela não tem limites quanto a quantidade de digitais armazenadas, porém, no modelo IndexSearch, ela só garante velocidade até 5000 digitais. (Lembre que 1 dedo registrado possui 2 samples da digital, portanto usa 2 digitais do limite de 5000).
Ja no modelo NSearch, não há impacto na velocidade acima de 5000 digitais, porém é necessário aquisição de licenças, por padrao ele vem com uma licença para operar até 1000 digitais.

Em ambos os casos, você deve varrer o DB com um loop para alimentar o IndexSearch ou o NSearch.


Com relação a integração de outros fabricantes, como suprema, voce deve ter o SDK da suprema e usa-lo, fazer a seleção na aplicação, se o usuario tem uma leitora nitgen usa as rotinas q voce gerou para nitgen, se ele tem suprema, usa as rotinas da suprema, o problema é que os FIR gerados não são compativeis. portanto o uso deve ser uma ou outra nunca ambas.
Para resolver o problema voce devera adquirir um SDK que tenha suporte a vários fabricantes como o Fingerprint 2009 da Griaule, mas além do custo do SDK ser proibitivo, ele ainda tem questões de royalties (por quantidade de digitais).


Quarto, multiplos terminais de cadastramento/verificação

Para uso de vários terminais de cadastramento, não é obrigatório usar modelo n-tier, mas você deve ter uma aplicação servidora para que ela concentre as digitais e faça as verificações/identificações, os clientes irão somente gerar os FIRs para cadastro e/ou verificação, enviar ao servidor e aguardar a resposta.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Sex Set 04, 2015 3:22 pm    Assunto: Responder com Citação

eu resolvi aqui assim:

Código:
1. cadastro o cliente e a digital no banco de dados (nao uso Enroll)
2. qdo preciso verificar
2.1 metodo 1 - portaria
   a. localizo o cliente
   b. limpo todas as firs da memoria
   c. carrego a fir do cliente (somente a dele)
   d. verifico usando as funcoes do sdk
   e. registro no BD q essa pessoa deu entrada no local
2.2 metodo 2 - atendimento interno
   a. carrego todas fir das pessoas q deram entrada no local (geralmente sao 300/400 por vez)
   b. verifico a digital entre as pessoas q estao carregadas usando as funcoes do sdk


basicamente é assim, dessa forma nao preciso carregar todas as firs de todos clientes todas as vezes
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
KleberAlmeida
Novato
Novato


Registrado: Quinta-Feira, 17 de Setembro de 2009
Mensagens: 21

MensagemEnviada: Seg Abr 18, 2016 3:17 pm    Assunto: Re: Biometria. Responder com Citação

heliorios escreveu:
Apos duas semanas em função deste programa de biometria, hoje do nada consegui que funcionasse completamente como eu desejava.
E o que tive que mudar foram somente o local da criação de algumas variavel e objetos, mas eu não conseguia enxergar.
Abaixo o programa para que todos que venham necessitar trabalhar com biometria, não passem o sufoco que passei.
Código:
unit UBiometria;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Comobj, DBClient, DB, StdCtrls, EditNew, Buttons, ComCtrls, Grids,
  DBGrids, Mask;

type
  TFBiometria = class(TForm)
    BtnCapturar: TBitBtn;
    BtnIdentificacao: TBitBtn;
    TextUserID: TEditN;
    Label12: TLabel;
    MedCpfFunc: TMaskEdit;
    SpbCpf: TSpeedButton;
    EdtNome: TEditN;
    Label2: TLabel;
    BtnNovo: TBitBtn;
    DBGrid1: TDBGrid;
    procedure BtnIdentificacaoClick(Sender: TObject);
    procedure BtnCapturarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SpbCpfClick(Sender: TObject);
    procedure MedCpfFuncEnter(Sender: TObject);
    procedure MedCpfFuncExit(Sender: TObject);
    procedure MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
    procedure MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BtnNovoClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure busca_Digital;
  end;

const
    NBioAPIERROR_NONE = 0;
    NBioAPI_FIR_PURPOSE_VERIFY      = 1;
    NBioAPI_DEVICE_ID_NONE          = 0;
    NBioAPI_DEVICE_ID_FDP02_0       = 1;
    NBioAPI_DEVICE_ID_FDU01_0       = 2;
    NBioAPI_DEVICE_ID_AUTO_DETECT   = 255;

var
    FBiometria: TFBiometria;
    objNBioBSP      : variant;
    objDevice       : variant;
    objExtraction   : variant;
    objIndexSearch  : variant;

implementation

{$R *.dfm}

uses UProc, UDm, USispo;

procedure TFBiometria.BtnCapturarClick(Sender: TObject);  // captura do aparelho a digital.
var nUserID   : integer;
    szFir     : wideString;
begin
   if Trim(MedCpfFunc.Text)='' then
      Begin
         Showmessage('Informe CPF funcionário');
         MedCpfFunc.SetFocus;
         exit;
      End;
    nUserID := 0;
    if TextUserID.Text <> '' then   // codigo do funcionario (ID)
        begin
           nUserID := StrToInt(TextUserID.Text);
           objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
           if objDevice.ErrorCode <> 0 Then
              Begin
                ShowMessage('Falha na abertura do aparelho biometrico !');
                close;
                exit;
              End;
           objExtraction.Enroll(nUserID, 0);  // ler impressão digital
           if objExtraction.ErrorCode <> NBioAPIERROR_NONE Then
              Begin
                 ShowMessage('Erro de leitura !');
                 close;
                 exit;
              End;
           objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT); // fecha aparelho biometrico
           szFir := objExtraction.TextEncodeFIR;        // captura string gerada pela DLL
           objIndexSearch.AddFIR(szFir, nUserID);
           if (objIndexSearch.ErrorCode = NBioAPIERROR_NONE) Then   // salva string no banco de dados se não tiver erro.
              begin
                 Dm.SQLFuncionario.Close;
                 Dm.SQLFuncionario.SQL.Clear;
                 Dm.SQLFuncionario.SQL.Add('Update bfuncionario');
                 Dm.SQLFuncionario.SQL.Add(' Set FuDigital='+QuotedStr(szFir));    // mysql FuDigital tipo Text
                 Dm.SQLFuncionario.SQL.Add(' where (FuCPF='+QuotedStr(trim(MedCpfFunc.Text))+')');
                 Dm.SQLFuncionario.ExecSQL;
              end
           else
              ShowMessage('Falha na extração da digital !');
        end
    else
        ShowMessage('Informar usuario');
end;

procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject);  // identifica usuario pela digital.
var szFir    : wideString;
    str      : wideString;
    User_id    : Integer;
    ListItem : TListItem ;
begin
   objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ;     // abre aparelho biometrico
   if objDevice.ErrorCode <> NBioAPIERROR_NONE then
      begin
         str := objDevice.ErrorDescription;
         ShowMessage('Falha no aparelho biométrico !');
         Exit;
      end;
   objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY);   // captura digital
   if objExtraction.ErrorCode = NBioAPIERROR_NONE then
      begin
         objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
         szFir := objExtraction.TextEncodeFIR;           // busca string da digital
         objIndexSearch.IdentifyUser(szFir, 5);          // identifica digital com o da memoria com nivel 5  de segurança
         if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
            ShowMessage('Funcionario não identificado !')
         else
            Begin
               User_id := objIndexSearch.UserID;               // pega o ID
               showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
               Dm.SQLFuncionario.Close;  // busca o funcionario pela ID informada.
               Dm.SQLFuncionario.SQL.Clear;
               Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
               Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
               Dm.SQLFuncionario.Close;
               Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
               Dm.SQLFuncionario.Open;
               if Dm.SQLFuncionario.Eof then
                  showmessage('Funcionario não localizado pelo codigo fornecido')
               else
                  Begin
                     MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
                     EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
                  End;
            End;
      end
   else
      ShowMessage('Falha na extração da biometria !');
   objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;

procedure TFBiometria.BtnNovoClick(Sender: TObject);
var i:integer;
begin
   ActiveControl:=nil;  // forca saida com on exit dos edit's
   for i := 0 to ComponentCount -1 do
      if Components[i] is TEdit then
         begin
            TEdit(Components[i]).Text := '';
         end;
   MedCpffunc.Enabled:=true;
   MedCpffunc.Text:=''; MedCpffunc.EditMask:='';
   Busca_Digital;
   MedCpfFunc.SetFocus;
end;

procedure TFBiometria.busca_Digital;
var nUserID   : integer;
    szFir     : wideString;
begin
   if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
      begin
         ShowMessage('Falha ao iniciar sistema de biometria!');
      end
   else
      Begin
        Caption := Caption + ' - Versão : v' + objNBioBSP.MajorVersion + '.' + objNBioBSP.MinorVersion;
        objIndexSearch.ClearDB;
        Dm.SQLFuncionario.Close;  // inicia banco de dados
        Dm.SQLFuncionario.SQL.Clear;
        Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
        Dm.SQLFuncionario.Close;
        Dm.SQLFuncionario.Open;
        Dm.SQLFuncionario.First;
        while not(Dm.SQLFuncionario.Eof) do
          begin
             if Dm.SQLFuncionario.FieldByName('FuDigital').AsString<>'' then
                Begin
                   nUserID:=Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger;
                   szFir:=Dm.SQLFuncionario.FieldByName('FuDigital').AsString;
                   objIndexSearch.AddFIR(szFir,nUserID);                // coloca na memoria as strings armazenadas no BD.
                   if objIndexSearch.ErrorCode <> NBioAPIError_None  then
                      Showmessage('Erro ao ler dados');
                End;
             Dm.SQLFuncionario.Next;
          end;
        Dm.SQLFuncionario.Close;
        Dm.SQLFuncionario.SQL.Clear;
      End;
end;

procedure TFBiometria.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    objNBioBSP      := 0;
    objDevice       := 0;
    objExtraction   := 0;
    objIndexSearch  := 0;
end;

procedure TFBiometria.FormCreate(Sender: TObject);
begin
   //Create NBioBSP object
   objNBioBSP := CreateOleObject('NBioBSPCOM.NBioBSP');  // uses  Comobj
   objDevice      := objNBioBSP.Device;
   objExtraction  := objNBioBSP.Extraction;
   objIndexSearch := objNBioBSP.IndexSearch;
   TextUserID.Text := '1';
end;

procedure TFBiometria.FormShow(Sender: TObject);
begin
   BtnNovo.Click;
end;

procedure TFBiometria.MedCpfFuncEnter(Sender: TObject);
begin
   MedCPFFunc.EditMask:='';
end;

procedure TFBiometria.MedCpfFuncExit(Sender: TObject);
begin
   If trim(MedCPFFunc.Text)<>'' then
      Begin
         MedCpfFunc.Enabled:=false;
         If length(trim(MedCPFFunc.Text))=11 then
            MedCpfFunc.EditMask:='000.000.000-00;0;'
         else
            Begin
               If length(trim(MedCPFFunc.Text))=14 then
                  MedCpfFunc.EditMask:='00.000.000/0000-00;0;';
            end;
         Dm.SQLFuncionario.Close;
         Dm.SQLFuncionario.SQL.Clear;
         Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
         Dm.SQLFuncionario.SQL.Add(' where FuCpf=:FuCpf');
         Dm.SQLFuncionario.Close;
         Dm.SQLFuncionario.ParamByName('FuCpf').AsString:=MedCpfFunc.Text;
         Dm.SQLFuncionario.Open;
         if Dm.SQLFuncionario.Eof then
            Begin
               showmessage('Funcionario não localizado');
               MedCpfFunc.SetFocus;
               exit;
            End;
         EdtNome.Text:=Dm.SQLFuncionario.fieldbyname('FuNome').AsString;
         TextUserID.Text:=inttostr(Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger);
      End
   else
      EdtNome.Text:='';
end;

procedure TFBiometria.MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = 13 then Perform(Wm_NextDlgCtl,0,0);
end;

procedure TFBiometria.MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
begin
// aceitar somente numeros de 0 a 9.
   If Key<>#8 then
      If not ((Key in ['0'..'9'])) then Key:=#0;
end;

procedure TFBiometria.MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   If key=113 then  // f2 pesquisa
      SpbCpf.Click;
end;

procedure TFBiometria.SpbCpfClick(Sender: TObject);
begin
   MedCpfFunc.EditMask:='';
   MedCpfFunc.SetFocus;
   F2Pesquisa(FBiometria,nil,3);
   If trim(MedCpfFunc.Text)<>'' then
      Begin
         EdtNome.SetFocus;
      end;
end;

end.


Aparelho biometrico Fingkey Hamster da Nitgen.
Obrigado a todos e espero que ajude.



Olá

Amigos, estou tentando usar esse código. Eu consigo capturar e salvar no banco..

Mas quando eu tento identificar, ele não acha o ID.. Não consegue achar o registro na base de dados..


procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;


Me ajude por favor..
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
robertoalcaras
Novato
Novato


Registrado: Domingo, 13 de Dezembro de 2015
Mensagens: 54

MensagemEnviada: Sex Jan 20, 2017 3:53 pm    Assunto: Re: Biometria. Responder com Citação

Consegui resolver seu problema com biometria



KleberAlmeida escreveu:
heliorios escreveu:
Apos duas semanas em função deste programa de biometria, hoje do nada consegui que funcionasse completamente como eu desejava.
E o que tive que mudar foram somente o local da criação de algumas variavel e objetos, mas eu não conseguia enxergar.
Abaixo o programa para que todos que venham necessitar trabalhar com biometria, não passem o sufoco que passei.
Código:
unit UBiometria;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Comobj, DBClient, DB, StdCtrls, EditNew, Buttons, ComCtrls, Grids,
  DBGrids, Mask;

type
  TFBiometria = class(TForm)
    BtnCapturar: TBitBtn;
    BtnIdentificacao: TBitBtn;
    TextUserID: TEditN;
    Label12: TLabel;
    MedCpfFunc: TMaskEdit;
    SpbCpf: TSpeedButton;
    EdtNome: TEditN;
    Label2: TLabel;
    BtnNovo: TBitBtn;
    DBGrid1: TDBGrid;
    procedure BtnIdentificacaoClick(Sender: TObject);
    procedure BtnCapturarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SpbCpfClick(Sender: TObject);
    procedure MedCpfFuncEnter(Sender: TObject);
    procedure MedCpfFuncExit(Sender: TObject);
    procedure MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
    procedure MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BtnNovoClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure busca_Digital;
  end;

const
    NBioAPIERROR_NONE = 0;
    NBioAPI_FIR_PURPOSE_VERIFY      = 1;
    NBioAPI_DEVICE_ID_NONE          = 0;
    NBioAPI_DEVICE_ID_FDP02_0       = 1;
    NBioAPI_DEVICE_ID_FDU01_0       = 2;
    NBioAPI_DEVICE_ID_AUTO_DETECT   = 255;

var
    FBiometria: TFBiometria;
    objNBioBSP      : variant;
    objDevice       : variant;
    objExtraction   : variant;
    objIndexSearch  : variant;

implementation

{$R *.dfm}

uses UProc, UDm, USispo;

procedure TFBiometria.BtnCapturarClick(Sender: TObject);  // captura do aparelho a digital.
var nUserID   : integer;
    szFir     : wideString;
begin
   if Trim(MedCpfFunc.Text)='' then
      Begin
         Showmessage('Informe CPF funcionário');
         MedCpfFunc.SetFocus;
         exit;
      End;
    nUserID := 0;
    if TextUserID.Text <> '' then   // codigo do funcionario (ID)
        begin
           nUserID := StrToInt(TextUserID.Text);
           objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
           if objDevice.ErrorCode <> 0 Then
              Begin
                ShowMessage('Falha na abertura do aparelho biometrico !');
                close;
                exit;
              End;
           objExtraction.Enroll(nUserID, 0);  // ler impressão digital
           if objExtraction.ErrorCode <> NBioAPIERROR_NONE Then
              Begin
                 ShowMessage('Erro de leitura !');
                 close;
                 exit;
              End;
           objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT); // fecha aparelho biometrico
           szFir := objExtraction.TextEncodeFIR;        // captura string gerada pela DLL
           objIndexSearch.AddFIR(szFir, nUserID);
           if (objIndexSearch.ErrorCode = NBioAPIERROR_NONE) Then   // salva string no banco de dados se não tiver erro.
              begin
                 Dm.SQLFuncionario.Close;
                 Dm.SQLFuncionario.SQL.Clear;
                 Dm.SQLFuncionario.SQL.Add('Update bfuncionario');
                 Dm.SQLFuncionario.SQL.Add(' Set FuDigital='+QuotedStr(szFir));    // mysql FuDigital tipo Text
                 Dm.SQLFuncionario.SQL.Add(' where (FuCPF='+QuotedStr(trim(MedCpfFunc.Text))+')');
                 Dm.SQLFuncionario.ExecSQL;
              end
           else
              ShowMessage('Falha na extração da digital !');
        end
    else
        ShowMessage('Informar usuario');
end;

procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject);  // identifica usuario pela digital.
var szFir    : wideString;
    str      : wideString;
    User_id    : Integer;
    ListItem : TListItem ;
begin
   objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ;     // abre aparelho biometrico
   if objDevice.ErrorCode <> NBioAPIERROR_NONE then
      begin
         str := objDevice.ErrorDescription;
         ShowMessage('Falha no aparelho biométrico !');
         Exit;
      end;
   objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY);   // captura digital
   if objExtraction.ErrorCode = NBioAPIERROR_NONE then
      begin
         objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
         szFir := objExtraction.TextEncodeFIR;           // busca string da digital
         objIndexSearch.IdentifyUser(szFir, 5);          // identifica digital com o da memoria com nivel 5  de segurança
         if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
            ShowMessage('Funcionario não identificado !')
         else
            Begin
               User_id := objIndexSearch.UserID;               // pega o ID
               showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
               Dm.SQLFuncionario.Close;  // busca o funcionario pela ID informada.
               Dm.SQLFuncionario.SQL.Clear;
               Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
               Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
               Dm.SQLFuncionario.Close;
               Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
               Dm.SQLFuncionario.Open;
               if Dm.SQLFuncionario.Eof then
                  showmessage('Funcionario não localizado pelo codigo fornecido')
               else
                  Begin
                     MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
                     EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
                  End;
            End;
      end
   else
      ShowMessage('Falha na extração da biometria !');
   objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;

procedure TFBiometria.BtnNovoClick(Sender: TObject);
var i:integer;
begin
   ActiveControl:=nil;  // forca saida com on exit dos edit's
   for i := 0 to ComponentCount -1 do
      if Components[i] is TEdit then
         begin
            TEdit(Components[i]).Text := '';
         end;
   MedCpffunc.Enabled:=true;
   MedCpffunc.Text:=''; MedCpffunc.EditMask:='';
   Busca_Digital;
   MedCpfFunc.SetFocus;
end;

procedure TFBiometria.busca_Digital;
var nUserID   : integer;
    szFir     : wideString;
begin
   if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
      begin
         ShowMessage('Falha ao iniciar sistema de biometria!');
      end
   else
      Begin
        Caption := Caption + ' - Versão : v' + objNBioBSP.MajorVersion + '.' + objNBioBSP.MinorVersion;
        objIndexSearch.ClearDB;
        Dm.SQLFuncionario.Close;  // inicia banco de dados
        Dm.SQLFuncionario.SQL.Clear;
        Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
        Dm.SQLFuncionario.Close;
        Dm.SQLFuncionario.Open;
        Dm.SQLFuncionario.First;
        while not(Dm.SQLFuncionario.Eof) do
          begin
             if Dm.SQLFuncionario.FieldByName('FuDigital').AsString<>'' then
                Begin
                   nUserID:=Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger;
                   szFir:=Dm.SQLFuncionario.FieldByName('FuDigital').AsString;
                   objIndexSearch.AddFIR(szFir,nUserID);                // coloca na memoria as strings armazenadas no BD.
                   if objIndexSearch.ErrorCode <> NBioAPIError_None  then
                      Showmessage('Erro ao ler dados');
                End;
             Dm.SQLFuncionario.Next;
          end;
        Dm.SQLFuncionario.Close;
        Dm.SQLFuncionario.SQL.Clear;
      End;
end;

procedure TFBiometria.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    objNBioBSP      := 0;
    objDevice       := 0;
    objExtraction   := 0;
    objIndexSearch  := 0;
end;

procedure TFBiometria.FormCreate(Sender: TObject);
begin
   //Create NBioBSP object
   objNBioBSP := CreateOleObject('NBioBSPCOM.NBioBSP');  // uses  Comobj
   objDevice      := objNBioBSP.Device;
   objExtraction  := objNBioBSP.Extraction;
   objIndexSearch := objNBioBSP.IndexSearch;
   TextUserID.Text := '1';
end;

procedure TFBiometria.FormShow(Sender: TObject);
begin
   BtnNovo.Click;
end;

procedure TFBiometria.MedCpfFuncEnter(Sender: TObject);
begin
   MedCPFFunc.EditMask:='';
end;

procedure TFBiometria.MedCpfFuncExit(Sender: TObject);
begin
   If trim(MedCPFFunc.Text)<>'' then
      Begin
         MedCpfFunc.Enabled:=false;
         If length(trim(MedCPFFunc.Text))=11 then
            MedCpfFunc.EditMask:='000.000.000-00;0;'
         else
            Begin
               If length(trim(MedCPFFunc.Text))=14 then
                  MedCpfFunc.EditMask:='00.000.000/0000-00;0;';
            end;
         Dm.SQLFuncionario.Close;
         Dm.SQLFuncionario.SQL.Clear;
         Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
         Dm.SQLFuncionario.SQL.Add(' where FuCpf=:FuCpf');
         Dm.SQLFuncionario.Close;
         Dm.SQLFuncionario.ParamByName('FuCpf').AsString:=MedCpfFunc.Text;
         Dm.SQLFuncionario.Open;
         if Dm.SQLFuncionario.Eof then
            Begin
               showmessage('Funcionario não localizado');
               MedCpfFunc.SetFocus;
               exit;
            End;
         EdtNome.Text:=Dm.SQLFuncionario.fieldbyname('FuNome').AsString;
         TextUserID.Text:=inttostr(Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger);
      End
   else
      EdtNome.Text:='';
end;

procedure TFBiometria.MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = 13 then Perform(Wm_NextDlgCtl,0,0);
end;

procedure TFBiometria.MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
begin
// aceitar somente numeros de 0 a 9.
   If Key<>#8 then
      If not ((Key in ['0'..'9'])) then Key:=#0;
end;

procedure TFBiometria.MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   If key=113 then  // f2 pesquisa
      SpbCpf.Click;
end;

procedure TFBiometria.SpbCpfClick(Sender: TObject);
begin
   MedCpfFunc.EditMask:='';
   MedCpfFunc.SetFocus;
   F2Pesquisa(FBiometria,nil,3);
   If trim(MedCpfFunc.Text)<>'' then
      Begin
         EdtNome.SetFocus;
      end;
end;

end.


Aparelho biometrico Fingkey Hamster da Nitgen.
Obrigado a todos e espero que ajude.



Olá

Amigos, estou tentando usar esse código. Eu consigo capturar e salvar no banco..

Mas quando eu tento identificar, ele não acha o ID.. Não consegue achar o registro na base de dados..


procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;


Me ajude por favor..
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
KleberAlmeida
Novato
Novato


Registrado: Quinta-Feira, 17 de Setembro de 2009
Mensagens: 21

MensagemEnviada: Sex Ago 25, 2017 12:52 pm    Assunto: Re: Biometria. Responder com Citação

robertoalcaras escreveu:
Consegui resolver seu problema com biometria



KleberAlmeida escreveu:
heliorios escreveu:
Apos duas semanas em função deste programa de biometria, hoje do nada consegui que funcionasse completamente como eu desejava.
E o que tive que mudar foram somente o local da criação de algumas variavel e objetos, mas eu não conseguia enxergar.
Abaixo o programa para que todos que venham necessitar trabalhar com biometria, não passem o sufoco que passei.
Código:
unit UBiometria;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Comobj, DBClient, DB, StdCtrls, EditNew, Buttons, ComCtrls, Grids,
  DBGrids, Mask;

type
  TFBiometria = class(TForm)
    BtnCapturar: TBitBtn;
    BtnIdentificacao: TBitBtn;
    TextUserID: TEditN;
    Label12: TLabel;
    MedCpfFunc: TMaskEdit;
    SpbCpf: TSpeedButton;
    EdtNome: TEditN;
    Label2: TLabel;
    BtnNovo: TBitBtn;
    DBGrid1: TDBGrid;
    procedure BtnIdentificacaoClick(Sender: TObject);
    procedure BtnCapturarClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure SpbCpfClick(Sender: TObject);
    procedure MedCpfFuncEnter(Sender: TObject);
    procedure MedCpfFuncExit(Sender: TObject);
    procedure MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
    procedure MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BtnNovoClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure busca_Digital;
  end;

const
    NBioAPIERROR_NONE = 0;
    NBioAPI_FIR_PURPOSE_VERIFY      = 1;
    NBioAPI_DEVICE_ID_NONE          = 0;
    NBioAPI_DEVICE_ID_FDP02_0       = 1;
    NBioAPI_DEVICE_ID_FDU01_0       = 2;
    NBioAPI_DEVICE_ID_AUTO_DETECT   = 255;

var
    FBiometria: TFBiometria;
    objNBioBSP      : variant;
    objDevice       : variant;
    objExtraction   : variant;
    objIndexSearch  : variant;

implementation

{$R *.dfm}

uses UProc, UDm, USispo;

procedure TFBiometria.BtnCapturarClick(Sender: TObject);  // captura do aparelho a digital.
var nUserID   : integer;
    szFir     : wideString;
begin
   if Trim(MedCpfFunc.Text)='' then
      Begin
         Showmessage('Informe CPF funcionário');
         MedCpfFunc.SetFocus;
         exit;
      End;
    nUserID := 0;
    if TextUserID.Text <> '' then   // codigo do funcionario (ID)
        begin
           nUserID := StrToInt(TextUserID.Text);
           objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
           if objDevice.ErrorCode <> 0 Then
              Begin
                ShowMessage('Falha na abertura do aparelho biometrico !');
                close;
                exit;
              End;
           objExtraction.Enroll(nUserID, 0);  // ler impressão digital
           if objExtraction.ErrorCode <> NBioAPIERROR_NONE Then
              Begin
                 ShowMessage('Erro de leitura !');
                 close;
                 exit;
              End;
           objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT); // fecha aparelho biometrico
           szFir := objExtraction.TextEncodeFIR;        // captura string gerada pela DLL
           objIndexSearch.AddFIR(szFir, nUserID);
           if (objIndexSearch.ErrorCode = NBioAPIERROR_NONE) Then   // salva string no banco de dados se não tiver erro.
              begin
                 Dm.SQLFuncionario.Close;
                 Dm.SQLFuncionario.SQL.Clear;
                 Dm.SQLFuncionario.SQL.Add('Update bfuncionario');
                 Dm.SQLFuncionario.SQL.Add(' Set FuDigital='+QuotedStr(szFir));    // mysql FuDigital tipo Text
                 Dm.SQLFuncionario.SQL.Add(' where (FuCPF='+QuotedStr(trim(MedCpfFunc.Text))+')');
                 Dm.SQLFuncionario.ExecSQL;
              end
           else
              ShowMessage('Falha na extração da digital !');
        end
    else
        ShowMessage('Informar usuario');
end;

procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject);  // identifica usuario pela digital.
var szFir    : wideString;
    str      : wideString;
    User_id    : Integer;
    ListItem : TListItem ;
begin
   objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ;     // abre aparelho biometrico
   if objDevice.ErrorCode <> NBioAPIERROR_NONE then
      begin
         str := objDevice.ErrorDescription;
         ShowMessage('Falha no aparelho biométrico !');
         Exit;
      end;
   objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY);   // captura digital
   if objExtraction.ErrorCode = NBioAPIERROR_NONE then
      begin
         objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
         szFir := objExtraction.TextEncodeFIR;           // busca string da digital
         objIndexSearch.IdentifyUser(szFir, 5);          // identifica digital com o da memoria com nivel 5  de segurança
         if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
            ShowMessage('Funcionario não identificado !')
         else
            Begin
               User_id := objIndexSearch.UserID;               // pega o ID
               showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
               Dm.SQLFuncionario.Close;  // busca o funcionario pela ID informada.
               Dm.SQLFuncionario.SQL.Clear;
               Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
               Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
               Dm.SQLFuncionario.Close;
               Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
               Dm.SQLFuncionario.Open;
               if Dm.SQLFuncionario.Eof then
                  showmessage('Funcionario não localizado pelo codigo fornecido')
               else
                  Begin
                     MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
                     EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
                  End;
            End;
      end
   else
      ShowMessage('Falha na extração da biometria !');
   objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;

procedure TFBiometria.BtnNovoClick(Sender: TObject);
var i:integer;
begin
   ActiveControl:=nil;  // forca saida com on exit dos edit's
   for i := 0 to ComponentCount -1 do
      if Components[i] is TEdit then
         begin
            TEdit(Components[i]).Text := '';
         end;
   MedCpffunc.Enabled:=true;
   MedCpffunc.Text:=''; MedCpffunc.EditMask:='';
   Busca_Digital;
   MedCpfFunc.SetFocus;
end;

procedure TFBiometria.busca_Digital;
var nUserID   : integer;
    szFir     : wideString;
begin
   if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
      begin
         ShowMessage('Falha ao iniciar sistema de biometria!');
      end
   else
      Begin
        Caption := Caption + ' - Versão : v' + objNBioBSP.MajorVersion + '.' + objNBioBSP.MinorVersion;
        objIndexSearch.ClearDB;
        Dm.SQLFuncionario.Close;  // inicia banco de dados
        Dm.SQLFuncionario.SQL.Clear;
        Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
        Dm.SQLFuncionario.Close;
        Dm.SQLFuncionario.Open;
        Dm.SQLFuncionario.First;
        while not(Dm.SQLFuncionario.Eof) do
          begin
             if Dm.SQLFuncionario.FieldByName('FuDigital').AsString<>'' then
                Begin
                   nUserID:=Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger;
                   szFir:=Dm.SQLFuncionario.FieldByName('FuDigital').AsString;
                   objIndexSearch.AddFIR(szFir,nUserID);                // coloca na memoria as strings armazenadas no BD.
                   if objIndexSearch.ErrorCode <> NBioAPIError_None  then
                      Showmessage('Erro ao ler dados');
                End;
             Dm.SQLFuncionario.Next;
          end;
        Dm.SQLFuncionario.Close;
        Dm.SQLFuncionario.SQL.Clear;
      End;
end;

procedure TFBiometria.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    objNBioBSP      := 0;
    objDevice       := 0;
    objExtraction   := 0;
    objIndexSearch  := 0;
end;

procedure TFBiometria.FormCreate(Sender: TObject);
begin
   //Create NBioBSP object
   objNBioBSP := CreateOleObject('NBioBSPCOM.NBioBSP');  // uses  Comobj
   objDevice      := objNBioBSP.Device;
   objExtraction  := objNBioBSP.Extraction;
   objIndexSearch := objNBioBSP.IndexSearch;
   TextUserID.Text := '1';
end;

procedure TFBiometria.FormShow(Sender: TObject);
begin
   BtnNovo.Click;
end;

procedure TFBiometria.MedCpfFuncEnter(Sender: TObject);
begin
   MedCPFFunc.EditMask:='';
end;

procedure TFBiometria.MedCpfFuncExit(Sender: TObject);
begin
   If trim(MedCPFFunc.Text)<>'' then
      Begin
         MedCpfFunc.Enabled:=false;
         If length(trim(MedCPFFunc.Text))=11 then
            MedCpfFunc.EditMask:='000.000.000-00;0;'
         else
            Begin
               If length(trim(MedCPFFunc.Text))=14 then
                  MedCpfFunc.EditMask:='00.000.000/0000-00;0;';
            end;
         Dm.SQLFuncionario.Close;
         Dm.SQLFuncionario.SQL.Clear;
         Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
         Dm.SQLFuncionario.SQL.Add(' where FuCpf=:FuCpf');
         Dm.SQLFuncionario.Close;
         Dm.SQLFuncionario.ParamByName('FuCpf').AsString:=MedCpfFunc.Text;
         Dm.SQLFuncionario.Open;
         if Dm.SQLFuncionario.Eof then
            Begin
               showmessage('Funcionario não localizado');
               MedCpfFunc.SetFocus;
               exit;
            End;
         EdtNome.Text:=Dm.SQLFuncionario.fieldbyname('FuNome').AsString;
         TextUserID.Text:=inttostr(Dm.SQLFuncionario.FieldByName('idbfuncionario').AsInteger);
      End
   else
      EdtNome.Text:='';
end;

procedure TFBiometria.MedCpfFuncKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = 13 then Perform(Wm_NextDlgCtl,0,0);
end;

procedure TFBiometria.MedCpfFuncKeyPress(Sender: TObject; var Key: Char);
begin
// aceitar somente numeros de 0 a 9.
   If Key<>#8 then
      If not ((Key in ['0'..'9'])) then Key:=#0;
end;

procedure TFBiometria.MedCpfFuncKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   If key=113 then  // f2 pesquisa
      SpbCpf.Click;
end;

procedure TFBiometria.SpbCpfClick(Sender: TObject);
begin
   MedCpfFunc.EditMask:='';
   MedCpfFunc.SetFocus;
   F2Pesquisa(FBiometria,nil,3);
   If trim(MedCpfFunc.Text)<>'' then
      Begin
         EdtNome.SetFocus;
      end;
end;

end.


Aparelho biometrico Fingkey Hamster da Nitgen.
Obrigado a todos e espero que ajude.



Olá

Amigos, estou tentando usar esse código. Eu consigo capturar e salvar no banco..

Mas quando eu tento identificar, ele não acha o ID.. Não consegue achar o registro na base de dados..


procedure TFBiometria.BtnIdentificacaoClick(Sender: TObject); // identifica usuario pela digital.
var szFir : wideString;
str : wideString;
User_id : Integer;
ListItem : TListItem ;
begin
objDevice.Open(NBioAPI_DEVICE_ID_AUTO_DETECT) ; // abre aparelho biometrico
if objDevice.ErrorCode <> NBioAPIERROR_NONE then
begin
str := objDevice.ErrorDescription;
ShowMessage('Falha no aparelho biométrico !');
Exit;
end;
objExtraction.Capture(NBioAPI_FIR_PURPOSE_VERIFY); // captura digital
if objExtraction.ErrorCode = NBioAPIERROR_NONE then
begin
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
szFir := objExtraction.TextEncodeFIR; // busca string da digital
objIndexSearch.IdentifyUser(szFir, 5); // identifica digital com o da memoria com nivel 5 de segurança
if objIndexSearch.ErrorCode <> NBioAPIERROR_NONE then
ShowMessage('Funcionario não identificado !')
else
Begin
User_id := objIndexSearch.UserID; // pega o ID
showmessage('Funcionario identificado com sucesso '+inttostr(User_id));
Dm.SQLFuncionario.Close; // busca o funcionario pela ID informada.
Dm.SQLFuncionario.SQL.Clear;
Dm.SQLFuncionario.SQL.Add('Select * from bfuncionario');
Dm.SQLFuncionario.SQL.Add(' where idbfuncionario=:idbfuncionario');
Dm.SQLFuncionario.Close;
Dm.SQLFuncionario.ParamByName('idbfuncionario').AsInteger:=User_id;
Dm.SQLFuncionario.Open;
if Dm.SQLFuncionario.Eof then
showmessage('Funcionario não localizado pelo codigo fornecido')
else
Begin
MedCpfFunc.Text:=Dm.SQLFuncionario.FieldByName('FuCpf').AsString;
EdtNome.Text:=Dm.SQLFuncionario.FieldByName('FuNome').AsString;
End;
End;
end
else
ShowMessage('Falha na extração da biometria !');
objDevice.Close(NBioAPI_DEVICE_ID_AUTO_DETECT);
end;


Me ajude por favor..


Consegui... Obrigado a todos
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Qua Jul 04, 2018 10:43 am    Assunto: Responder com Citação

ola pessoal, ressuscitando o topico.

to tendo problemas pra fazer a leitura em alguns modelos.
aqui na empresa tenho o Hamster DX (HFDU06), funciona perfeito.

mas qdo instala no cliente q tem HFDU14 ou HFDU04 (ou outro modelo) nao funciona corretamente.

alg tem alguma solucao pra esse problema?
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
rafaelmgobo
Novato
Novato


Registrado: Sexta-Feira, 19 de Julho de 2013
Mensagens: 63

MensagemEnviada: Ter Ago 13, 2019 10:36 am    Assunto: Responder com Citação

joemil escreveu:
ola pessoal, ressuscitando o topico.

to tendo problemas pra fazer a leitura em alguns modelos.
aqui na empresa tenho o Hamster DX (HFDU06), funciona perfeito.

mas qdo instala no cliente q tem HFDU14 ou HFDU04 (ou outro modelo) nao funciona corretamente.

alg tem alguma solucao pra esse problema?


Estou tentando utilizar o SDK 2014, porém tive problemas com incompatibilidade e não consegui executar o demo.

Alguém tem alguma solução?
_________________
Delphi XE4 + Oracle.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Ir à página Anterior  1, 2
Página 2 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB