Sistema de Biometria em PHP + Delphi

Estou desenvolvendo um projeto web em php/mysql para uma escola que precisa de um módulo de Presença, a famosa “chamada” através da biometria. Pesquisando conclui que a única forma possível de desenvolver biómetria em “PHP” era utilizando um activex porem no meu projeto não era interessante. Dai encontrei um solução no mercado livre (codigo fonte) a venda por R$50,00 que interagia um executavel em delphi com arquivos PHP. Comprei e adotei no meu projeto e agora estarei disponilizando aqui😛

O desenvolvedor dessa solução utilizou um driver da Griaule generico para capturar a digital através do Delphi. Os leitores testados são:
Leitores suportados:

Microsoft Fingerprint Reader
Digital Persona U.are.U 4000/4000B
SecuGen Hamster FDU02
Geomok (Testech) Bio-I
Crossmatch V250/V300/V300 LC/V300 LC2/V500

No delphi existem 2 opção salvar e reconhecer digital.

Na opção de salvar, ao colocar o dedo no leitor e clicar para salvar o delphi através dos componentes Indy efeturá um post em um arquivo php exemplo: www.dominio.com.br/recebePOST.php. O arquivo php recebe um POST com os numeros das digitas e assim você pode armazenar no seu banco, no caso da solução foi um banco mysql.

A segunda opção é reconhecer a digital, ao clicar para reconhecer, o delphi tb através do componente indy fará uma requisição ao um arquivo seu PHP que retornará para o delphi todas seus codigos das digitais cadastrados e assim será feita uma pesquisa para ver se a digtal que foi precionada confere com alguma já cadastrada. Você pode colocar na função de busca de 1% a 100% de precisão, estou trabalhando com 90%.

Segue o link do codigo fonte para download:

81 Comments

  1. Pedro, bom dia

    Tenho uma aplicação em PHP com um banco de dados Mysql onde estão cadastrados as pessoas que irão registrar a biometria, podendo ser digital e, caso tenha alguma anormalidade nos dedo, realiza a facial. Meu leitor é um Zkteco Multibio 700 (denominação original da Zk) ou Passface 1022 da Biometrus.
    Preciso interagir com o Leitor, assim como gravar e ler as impressões digitais e faciais num endereço definido, sem necessitar de usar a exportação direto pelo aparelho via usb. Você tem alguma aplicação que possa atender minhas necessidades?

    Grato

    DC

  2. Retorna o seguintes erros:
    [Fatal Error] Unable to build. License is invalid or has expired.
    [Fatal Error] Unable to build. License is invalid or has expired.
    [Fatal Error] Project1.dpr(2): Read error on ‘c:program files (x86)borlanddelphi7LibSystem.dcu’

    Poderia me ajudar?

  3. olá
    estou tentando desenvolver um sistema que utilize biometria para a empresa em que trabalho.
    faço uso do U.are.U 4000b da digital persona, quando compilo o programa e vou testa-lo o leitor não le nada.
    a única alteração que fiz no código original foi os endereços de get e post
    poderiam me ajudar?

  4. Anderson
    A variável esta invertida!

    Arquivo:Unit1.pas escreva:

    // cteURLPost = ‘http://rssistemas_sp.hyperphp.com/digitalPost.php’;
    // cteURLGet = ‘http://rssistemas_sp.hyperphp.com/digital.php’;

  5. Boa noite Pedro!
    Parabéns pela iniciativa de postar o código. Estou fazendo um curso de delphi com biometria e seu código está me ajudando muito. Que sua postura sirva de exemplo aos demais desenvolvedores no que diz respeito a compartilhar o conhecimento. Abraços!

  6. Prezado Pedro, consigo fazer tudo menos passar a variavel pDigital, dá erro HTTP/1.1 403 Forbidden… Existe algo que eu possa fazer? Já procurei de tudo na Internet. Se puder ajudar te agradeço muito! Abs

  7. Olá amigo sei que o post já esta um pouco antigo mais eu estaria precisando de sua ajuda será que vc poderia me ajudar?
    passa o teu e-mail para um contato.

  8. Pessoal Boa Tarde…
    Não manjo nada de Delphi, porém, gostaria de fazer uma incorporação deste sistema, com o sistema que tenho em PHP.

    Há possibilidade… já baixei os fontes, porém, não consigo executá-los… assim como, será que posso fazer algum tipo de conexão com o PHP

  9. Ola eu refiz um novo software com base neste exemplo em delphi. O sistema reconhece e grava certinho num banco SQL SErver. Estou com dificuldades para reconhecer. O sistema le a string gravada no banco e manda para função de reconhecimento mas nunca retorna true. Alguem conseguiu fazer funcionar em outro banco? Sera que é o tipo de dado que guarda a string no banco?

    Preciso de ajuda. Se alguem puder me ajudar meu e-mail é nandolb@hotmail.com.

    Grato.

  10. Para quem gostaria de salvar a imagem da digital, eu utilizo o seguinte código:

    DECLARE AS VARIÁVEIS:
    Temp: Boolean;
    img: TJPEGImage;
    diretorio: Pchar;

    No meio do código do botão para salvar a digital, coloque:

    temp := imgcadastro.Picture.Graphic is TJPEGImage;
    img := TJPEGImage.Create;
    img.Assign(imgcadastro.Picture.Bitmap);
    img.ProgressiveDisplay := True;
    // define a qualidade de impressão, vai de 0 a 100, qto maior a qualidade, maior o arquivo
    img.CompressionQuality := 100;
    img.Compress;
    diretorio := ‘C:TCCImagensDigitais’;
    // Pchar(DMDados.sPathFotos + ‘Digitais’);
    if not DirectoryExists(diretorio) then
    CreateDir(diretorio);
    // if frmUsuarios nil then
    img.SaveToFile(diretorio + dmprincipal.SDSUsuariosCODIGO.AsString + ‘_’ +
    campo + ‘.jpg’);
    img.Free;

  11. Estou com um problema na parte de identificar a digital, como nao tenho o servidor PHP, e sim um server firebird 2.5 e salvo a string da digital em um Blob Text e converto de WideString para string, como que eu faço para que ele compare a digital?

    Na parte do código

    function fPesquisa_digitalBase(): boolean;
    var
    lvStr, lvNm: string;
    lvSc: integer;
    lvIdx: integer;
    lvLst: TStringList;
    begin
    Result := false;
    lvLst := TStringList.Create();
    lvLst.Text := form1.http.Get(cteURLGet); <<<<
    for lvIdx := 0 to lvLst.Count – 1 do

    Eu substitui o lvLst.Text := form1.http.Get(cteURLGet);
    por
    lvLst.Text :=dmprincipal.SDSUsuarios.FieldByName('str_indicador_direito').AsString;

    Mas nao funciona, de que forma eu posso colocar isso para que identifique?

  12. Ola Marcos, consegui colocar o aplicativo pra rodar, porem, estou com um probleminha.
    Quando eu cadastro a impressão digital vai para o banco.

    Todas impressoes digital vem uma atrás da outra, formando uma gigandesca string.

    Exemplo:
    Id —-digital
    1——-aaaaa
    2——-bbbbb
    3——-ccccc
    4——-ddddd

    Retorno do PHP :
    aaaabbbbbccccddddd

    O aplicativo consegue apenas dizer se a impressão digital é valida ou não, mas não consegue saber de quem é a impressão digital.

    Voce tem alguma idéia de como posso resolver isso?

    Tiago Junior – Igarassu
    Graduando em Sistema da Informação – Faculdade Santa Emília
    Desenvolvedor PHP OO – HiperDot – Olinda Digital
    tiagojr159@hotmail.com

  13. Pedro,
    parabéns pelo post e muito obrigado por compartilhar!
    Consegui fazer funcionar perfeitamente.
    Permita-me fazer somente uma correção.

    As constantes abaixo estão invertidas, porque cteURLPost deve armazenar digitalPost.php:
    ———————-
    const
    cteURLPost = ‘http://localhost/folhaPonto/biometria/digital.php’;
    cteURLGet = ‘http://localhost/folhaPonto/biometria/digitalPost.php’;
    —————–

    O correto seria:
    —————
    const
    cteURLPost = ‘http://localhost/folhaPonto/biometria/digitalPost.php’;
    cteURLGet = ‘http://localhost/folhaPonto/biometria/digital.php’;
    —————

    Obrigado mais uma vez e abraços!
    Luciano

  14. Lucas, você precisa configurar no Delphi a url que será realizado o POST no seu “scriptcase”.

    Infelizmente não posso fazer o projeto para você. Todas informações estão no arquivo que disponbílizei para download.

  15. cara, logo apos configurar o bd, gerar o exe no delphi, como vai ser feita a interação no scriptcase e a leitura da biometria ??? o sistema vai conectar com o banco de dados e busca as inform. ??

  16. Ok, vou providenciar a instalação do mesmo. Cara, tem como eu entrar em contato com voce por email ? ou algum mensageiro do tipo ? pra esclarecer melhor minhas duvidas ? Obrigado

  17. Bom pedro, instalei o delphi aqui pra ver como funciona mais ou menos, porque nunca mechi com ele intende. Estou tendo o mesmo problema que o Ricardo, o programa nao encontrou a classe “IdTHHP” .. estou usando a versão “portable”. Acha que influencia ? Obrigado

  18. Marcos não faço ideia do que seja.

    Lucas conheço o script case sim.
    Qual a sua dúvida? Ficou muito vago “como faço para integrar?” ficou parecendo que você não faz ideia do que está fazendo.

  19. Cara, muito bom … Mas tenho algumas duvidas, bom, estou desenvolvendo um sistema parecido om o seu, em scriptcase, conhece ? Bom, tenho que fazer esse sistema seu de leitor biometrico com o meu sistema desenvolvido no scriptcase. Como que faço pra integrar os dois ? a tabela no BD ja está criada … Aguardo retorno. Obrigado

  20. Olá Pedro!
    Primeiramente gostaria de agradecer pela iniciativa de postar estes fontes no site!

    Porém estou encontrando problemas na verificação, executei a instalação do driver FingerCap, gerei o executável, ele abre sem problemas, porém não coleta a digital. Saberia me dizer o que pode ser?

    Grato e no aguardo

  21. Olá Pedro!
    Muito legal sua iniciativa de compartilhar este projeto conosco, parabéns!

    Tenho uma super dúvida: este executável gerado do Delphi pode ser chamado por uma página PHP? Pois estou desenvolvendo um sistema para controle de acesso, e existirá um cadastro de visitantes, com campos para preencher os dados pessoais, para capturar foto pela web-cam e impressão digital… gostaria de colocar tudo em uma mesma página PHP. É possível chamar o executável na página PHP?

    Muito obrigada, aguardo retorno, Bianca.

  22. Correção: você me ajudou bastante.
    Lembrei de algo para perguntar, li na internet vários comentários sobre leitores biometricos, no entanto, não consegui chegar a um concenso, ou seja, qual leitor é o mais confiável. eu estou querendo adquirir o da Microsoft. O que você me sugeri? Eu já vi uma empresa usando um leitor chamado Nitgen Hamster, funcionava perfeitamente, entretanto, eu tenho medo dele não funcionar com este projeto disponibilizado por você.

  23. Caro, você me achou bastante, mas muito mesmo, o projeto é excelente. Mesmo sem um leitor em mãos, eu dei uma olhada no código fonte e achei muito bom, já que estudo a muitos anos delphi ficou fácil de compreender algumas partes. Bom, eu irei fazer algumas modificações, pois eu quero usar um banco de dados local, o firebird 2.5 . Aproveitando ti pergunto, você já leio algo sobre o limite máximo que esse banco de dados suporta? Eu vou precisar cadastrar mais ou menos 2500 a 3000 digitais

  24. Oi amigo, no post você disse que estava fazendo um projeto escolar, no caso você usou outra linguagem além do php e delphi? Eu estou estudando php, ainda não vi delphi, sei um pouco de mysql, você pode me mostrar como ficou seu projeto web para que eu tenha mais mais noção de como fazer algo complexo? Obrigado.

  25. Comprei um biometrico com o nome FingerPrint Reader APC, mas a digial nao foi escaniada, mesmo com os drivers do Hardware instalados e funcionando, sabe porque?

  26. Pedro,

    Fiz tudo como está aqui descrito. quando executo o arquivo Project1.exe executa direitinho, le a digital, mas nao estou conseguindo salvar no banco, nem comparar as digitais. poderia me dar uma ajuda ?

  27. Olá Pedro,
    Este sistema funciona em windows 7?
    Tentei fazer alguns testes aqui mais quando clico em capturar o leitor não acende fica todo apagado. O que pode ser?

  28. Tentei abrir o fonte no Delphi 6 e deu erro:
    “error reading http.MaxLineAction: Property MaxLineAction does not exist. Ignore the error and continue? NOTE: ignoring the error may cause components to be deleted or property values to be lost”.
    O q pode ser isso? Urgenteeeeeeeeeee

  29. Olá Cesar, nesse arquivo que disponibilizei, a ideia é fazer exatamente o que você precisa “armazenar” e “verificar” o codigo gerado por cada digital.

    Sobre o não funcionamento, temos 2 pontos:

    – No script existe uma % de acerto, ou seja se você deixar 100% a digital tem que bater certinha com a cadastrada, eu utilizo no 80%.

    – Na minha aplicação realizo 3 cadastros de digitais, para na hora de verificar sempre bate com uma das 3.

  30. Olá Pedro!

    Estou desenvolvendo uma aplicação em php para gerenciamento interno de uma clínica de estética. Na questão de autenticação de pacientes e funcionários, vi no seu aplicativo uma forma de gerenciar rápida e simples! Entretanto, no ambiente de testes, o projeto disponibilizado não reconhece nenhuma digital. Mesmo só tendo a minha digital cadastrada no banco, e eu colocando a minha digital no reconhecimento. não dá certo! O que poderia ser?

    Estava pensando também em fazer o algoritmo de comparação direto no código php, para que ele pudesse inserir mais dados no banco, de acordo com a minha aplicação! Ou seja, gostaria de usar o delphi apenas para capturar e transformar a digital na string em hexa para armazenamento no banco! Teria como isso ser feito?

    Abraços

  31. Amigo seu exemplo é um colírio para nossos olhos em vista da dificuldade de encontrar informações para biometria em php.
    Faço todo o procedimento, mas onde vejo o arquivo postado com a biometria?

  32. Observei seu exemplo e é muito bom, gostaria de saber se é possivel aproveita-lo em outro banco de dados e somente no delphi. Outra duvida seria porque a conversão pra hexadecimal.
    t+

  33. Usei o Digital Persona U.are.U 4000!

    Pessoal infelizmente não deu para entrar em contato com ninguem para poder dar uma força por falta de tempo! A ideia do post foi dar um startup para quem tivesse sem ideias.

  34. Amigo, esta dando o erro socket error 10061, primeiro era a porta 80 ai desativei o teamwier, e apareceu este.. manda a resposta pelo email pra mim,,, estou usando o easyphp apache,mysql,php e instalei o endereço corretamente, localhostbiometria e não envia o post para salvar..

  35. Tentei abrir o fonte no Delphi 2009 e deu erro:
    “error reading http.MaxLineAction: Property MaxLineAction does not exist. Ignore the error and continue? NOTE: ignoring the error may cause components to be deleted or property values to be lost”.

    O q pode ser isso?

  36. Pedro Puppim

    Vou precisar muito de sua ajuda, estou Desenvolvendo meu Projeto de Final de Curso, que seria Desenvolvimento de um Software para Identificação por Leitura Digital Biométrica em Viaturas de Policia, já comprei o Leitor da Persona o mesmo q você utilizou, só a parte da Biometria que vai pegar. Pode me passar seu e-mail ou telefone, estou disposto a pagar pela sua ajuda. Obrigado.

  37. Olá Pedro,

    Muito obrigado pelo exemplo e post aqui.

    Uma perguntinha. Pelo que entendi, é necessário que o usuário clique em um botão após colocar seu dedo no leitor, para que o reconhecimento seja feito.

    Como você implementou isso para o seu sistema de escola? Cada aluno tem que colocar o dedo e apertar o botão? Você fez isso de alguma forma automatizada?

    Obrigado

  38. Amigo, estou fazendo meu tcc e tenho a intenção de apenas obter a validação do usuario utilizando sua digital, penso em utilizar delphi, porem não entendo muito.. vc teria alguma dica ou algum arquivo que possa me ajudar? obrigado

  39. Rapaz estou tentando fazer funcionar e estou com o seguinte problema: Clico em capturar ele liga o leitor, recebe a digital mas quando clico em salvar digital da o seguinte erro: HTTP/1.1 404 Not Found. O que tenho que fazer?

  40. Rafael, o primeiro passo é realizar a instalação do delphi completo, depois instalar o driver Griaule para o leitor.

    Abra o arquivo .dpr no delphi e edite as constantes das URL´s que o sistema vai utilizar, basicamente é isso.

7 Trackbacks / Pingbacks

  1. Links tecnológicos da semana #33 | Viablog
  2. Coisasuteis
  3. valtrex dosage genital herpes
  4. canada online pharmacy soma
  5. viagra email spam
  6. no dep poker
  7. soma side affects

Leave a Reply

Seu e-mail não será publicado.


*