Ir al contenido principal

Programación de un lector de huella digital en Java. Parte 4.

Anteriormente hemos visto cómo capturar y guardar huellas digitales en una base de datos en MySQL (si no sabes a lo que me refiero lee las partes UnoDos  y Tres  de este tutorial) ahora toca el turno a la verificación de una identidad por medio de la huella e identificación de una persona.

Antes de continuar cabe aclarar(y diferenciar) a lo que me refiero con verificación identificación:

  • Verificación: Es el corroborar la identidad de una persona por medio de un dato previamente dado (como el nombre, una credencial, CURP, etc) y su huella digital, por ejemplo: yo digo que soy Juan Pérez y lo confirmo con mi huella digital.
  • Identificación: Es el corroborar la identidad de una persona utilizando solamente su huella digital, por ejemplo: coloco mi huella digital y el sistema automáticamente sabe que soy Juan Pérez.

Una vez aclarado lo anterior, procedamos pues a analizarlo en base al código que hemos agregado para las consultas en la parte 3 del tutorial

Anteriormente agregamos un método de nombre initDB() que es por medio del cual se inicializa la conexión y se preparan las consultas a la base de datos, dicho método tiene, entre otras cosas, las siguientes líneas:
                  
           identificarStmt   = dbConnection.prepareStatement("SELECT * FROM somhue");
           verificarStmt     = dbConnection.prepareStatement("SELECT huehuella FROM somhue WHERE huenombre=?");

Nota: anteriormente en la sentencia identificarStmt se tenía huehuella en lugar de *, para fines de esta aplicación debemos de cambiarlo para que quede tal cual se muestra en las líneas anteriores.

Aquí diferenciamos claramente que al momento de identificar una huella seleccionamos todas las huellas de la base de datos (que posteriormente compararemos una por una con la que tenemos actualmente para identificar a quién pertenece dicha huella), pero al momento de verificar solamente tomamos un registro de huella filtrando con el nombre de la persona a quien pertenece.

¿Todo perfectamente claro? Ok. Sigamos con el código que va a realizar la primer función: Verificar.

   /**
    * Verifica la huella digital actual contra otra en la base de datos
    */
   public void verify(String nom) {
       try {
           //Obtiene la plantilla correspondiente a la persona indicada
           verificarStmt.setString(1,nom);
           ResultSet rs = verificarStmt.executeQuery();
           
           //Si se encuentra el nombre en la base de datos
           if (rs.next()){
               //Lee la plantilla de la base de datos
               byte templateBuffer[] = rs.getBytes("huehuella");
               //Crea una nueva plantilla
               Template referenceTemplate = new Template(templateBuffer);
               
               //compara las plantilas (actual vs bd)
               boolean coinciden = fingerprintSDK.verify(template,referenceTemplate);
               
               //Si corresponden, dibuja el mapa de correspondencia y lo indica con un mensaje
               if (coinciden){                   
                   ui.showImage(GrFingerJava.getBiometricImage(template, fingerprint, fingerprintSDK));                                  
                   JOptionPane.showMessageDialog(ui, "Las huellas sí coinciden");
               } else {
                   //De no ser así lo indica con un mensaje
                   JOptionPane.showMessageDialog(ui, "No corresponde la huella con "+nom, "Error", JOptionPane.ERROR_MESSAGE);
               }
               
               //Si no encuentra alguna huella correspondiente 
                        //al nombre lo indica con un mensaje
           } else {
               JOptionPane.showMessageDialog(ui, "No existe el registro de "+nom, "Error", JOptionPane.ERROR_MESSAGE);
           }
       } catch (SQLException e) {
           e.printStackTrace();           
       } catch (GrFingerJavaException e) {
           e.printStackTrace();           
       }
   }

Al realizar lo anterior es posible que necesites importar algunas clases como java.sql.ResultSet para que todo funcione correctamente.

Ahora solo se debe de agregar una llamada al método verificar() desde el botón de Verificar en la clase interfaz.PantallaPrincipal, para realizarlo correctamente se debe dar doble clic sobre el botón y posteriormente agregar el código dentro del método creado de tal manera que quede así...

private void btnVerificarActionPerformed(java.awt.event.ActionEvent evt) {
    String nombre = JOptionPane.showInputDialog("Nombre a verificar:");
    procedimientosSDK.verify(nombre);
}

Si corremos la aplicación tras realizar lo anterior podremos verificar la huella capturada actualmente contra otra en la base de datos y el sistema nos indicará si la huella coincide o no...

Hasta aquí le dejamos en esta parte, si le has entendido correctamente a la lógica del código no te será difícil crear el método de identificar(), si lo deseas, puedes esperar a la próxima entrega en la cual lo explicaré paso a paso.

¿Alguna duda o algo qué decir? Deja tu comentario. Saludox.

****Actualización (08/08/2012)****
A petición de todos les dejo la lista de todos los artículos de este tutorial.

Comentarios

  1. buenos dias eh estado siguiendo estos tutoriales para incluir un lector de huella digital por otra parte yo tengo poco programando en java y me gustaria saber cuadno publicas la parte donde hace la identificacion de l ahuella digital

    ResponderEliminar
  2. Hola, he seguido los pasos, pero me sale el siguiente error:

    License not found or read error


    esto paso despues que tuve que formatear el equipo, probe en otro pc y pasó lo mismo.

    Desde ya muchas gracias

    ResponderEliminar
  3. Qué tal,

    El error que mencionas es por que la licencia del sdk de griaule no está colocada en el directorio correcto, te sugiero que lo cheques y verifiques que se encuentre donde se menciona en la primera parte del tutorial.

    saludox

    ResponderEliminar
  4. Muchas gracias por tu respuesta, con respecto al tema, sigo con el mismo problema, he seguido al pie de la letra la primera parte del tutorial.

    Saludos

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Hola Monillo007,
    Estoy leyedo todo el tutorial antes de empezar y queria consultarte, como es que se comportaria la busqueda si no se coloca el identificador previo de la persona? y hay 300,000 posibilidades? Cuanto podria demorar la busqueda?

    Gracias por tu respuesta y el aporte,

    Rocio.

    ResponderEliminar
  7. Qué tal Rocio,

    Te comento que de acuerdo a la información que Griaule proporciona, el SDK puede realizar hasta 35,000 comparaciones por segundo, por lo tanto, una búsqueda como la que comentas tardaría aproximadamente 8.5 segundos.

    Recuerda que mucho tiene que ver el ancho de banda de la red (en caso de que se maneje de esta manera) y la velocidad del motor de base de datos.

    Espero haberte ayudado. Saludox.

    ResponderEliminar
  8. hola amigo que mas como estas espero que bien, la verda tu ejemplo me ha servido de mucho y he hecho maravillas con eso, solamente tengo una duda, como puedo hacer para que se haga una identificacion? que apenas la persona coloque el dedo lo busque en la base de datos?

    ResponderEliminar
  9. Te felicito y agradezco tan simple y completo tutorial


    Julio Berrios CHILE

    ResponderEliminar
  10. Oye carnal yo tengo un proyecto que realizar pero la verdad ni se como empezarlo tambien es sobre el chequeo de entradas y salidas pero de docentes por medio de huella dactilar te agradeceria si me pasas el codigo para ver como empesarlo como veo que manejas java pues ojala me hagas ese favor de verdad te lo agradeceria mi mail es miclo1103@yahoo.com

    ResponderEliminar
  11. Para la comparación que menciona Rocio, que sugieres hacer? una aplicación en la parte del servidor que este corriendo y cuando llegue un template lo compare¿? obvio es ilogico mandar el arreglo de 300 mil templates, por ancho de banda y la seguridad. Tienes algun desarrollo en la parte del server?

    Saludos pp

    ResponderEliminar
  12. Ppillo,

    Justamente la solución tendría que ver con lo que mencionas, en mi caso, desarrollé un webservice que se encargara de realizar todo el trabajo pesado y solamente retornara si la huella coincide con la que busco o no. Como te imaginarás, mediante esta técnica se mejora considerablemente el rendimiento de la aplicación.

    Saludox.

    ResponderEliminar
  13. Hola Luis, sabras cuales son los eventos del lector?? esque no quiero crear un boton "identificar", quiero que el lector despues de haber tomado mi huella llame al metodo identificarPersona();

    ResponderEliminar
  14. Qué tal,

    Para mayor referencia puedes consultar la documentación del SDK en la carpeta de instalación (...\Griaule\Fingerprint SDK Java 2007\doc\javadoc). De cualquier manera te digo que los métodos que te sirven son onFingerDown() y onFingerUp() para detectar cuando se coloca y retira un dedo del lector respectivamente.

    Saludos.

    ResponderEliminar
  15. Luis creo que ya encontre la solución para no crear un boton "identificar", mira hice lo siguiente:

    public void onFingerUp(String idSensor) // evento que se genera al levantar el dedo del lector
    {
    identificarPersona();
    }

    en el metodo onFingerUp(String idsensor) mando llamar a identificarPersona();
    no me ha mostrado ningun error hasta ahora. Saludos.

    ResponderEliminar
  16. Saludos !!!!!
    estoy utilizando un lector de huella SUPREMA, en esta linea me da error:

    import com.suprema.ufe33.BioMiniJniSDK;

    donde puedo conseguir este paquete??? porq no lo tengo instalado..

    Agradezco su ayuda.!

    ResponderEliminar

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social?
Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo.
En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber.
Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore
Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo…

Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de domici…

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans.

Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle. En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos.Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece.

La solución a tu problema tras el salto...