Huella Digital Java y Mysql
Huella Digital Java y Mysql
Huella Digital Java y Mysql
y mySQL
Publicado por napster2011 el 29 de marzo de 2012
Publicado en: Base de Datos, Linux, Programacion, Tecnología, Windows. 34
comentarios
Hola amigos, hace aproximadamente un mes publique un articulo, donde les enseñaba a
desarrollar un sistema de autenticacion por huella digital utilizando como lenguaje de
programación JAVA y como motor de bases de datos mySQL Server 5.1.
Para el desarrollo del proyecto, utilicé el IDE para programar en Java de Oracle,
llamado NetBeans 7.1
Como pueden observar, nuestro proyecto se llama LectorHuellas y consta de tres
clases, y cada una de éstas (las clases) tiene su respectiva función dentro del proyecto:
Clase Interfaz
/**
* @package: interfaz
* @class: PantallaPrincipal
* @author: Ricardo Rosero
* @version: 1.0
*/
package interfaz;
/**
* @librerias importadas
* @author: Ricardo Rosero
*/
import com.griaule.grfingerjava.GrFingerJavaException;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.BevelBorder;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import procedimientos.Util;
/**
* @function: PantallaPrincipal
* @author: Ricardo Rosero
* @access: public
* @return
*/
public PantallaPrincipal() {
inicializar();
initComponents();
procedimientosSDK.inicializarCaptura();
setLocationRelativeTo(null);
setVisible(true);
}
/**
* @function: inicializar
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void inicializar() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
System.err.println(“No se pudo aplicar el estilo visual”);
}
//Crea una instancia de Util
this.procedimientosSDK = new Util(this);
}
/**
* @function: crearPanelHuella
* @author: Ricardo Rosero
* @access: private
* @return
*/
private JComponent crearPanelHuella() {
//Crea un panel nuevo para mostrar la huella
fingerprintViewPanel = new JPanel(){
//Se sobreescribe el método paintComponent para habilitar la muestra de la imagen de
la huella
public void paintComponent(Graphics g) {
super.paintComponent(g);
//Si hay una imagen para ser mostrada
if (fingerprintImage!=null) {
//Calcula el tamaño y posición de la imagen para ser pintada el tamaño es ajustado
para que ocupe todo el tamaño del panel
Insets insets = getInsets();
int transX = insets.left;
int transY = insets.top;
int width = getWidth() – getInsets().right – getInsets().left;
int height = getHeight() – getInsets().bottom – getInsets().top;
//Se dibuja la imagen
g.drawImage(fingerprintImage, transX, transY, width, height, null);
}
}
};
//Se agrega un border alrededor del panel
fingerprintViewPanel.setBorder(new CompoundBorder (
new EmptyBorder (2,2,2,2),
new BevelBorder(BevelBorder.LOWERED)));
fingerprintViewPanel.setToolTipText(“Imagen de la última huella capturada.”);
if(fingerprintViewPanel==null){
System.exit(1);
return null;
}
else{
return fingerprintViewPanel;
}
}
/**
* @function: showImage
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void showImage(BufferedImage image) {
//Utiliza el imageProducer para crear una imagen de la huella digital
fingerprintImage = image;
//Se dibuja la nueva imagen
repaint();
}
/**
* @function: initComponents
* @author: Ricardo Rosero
* @access: private
* @return
*/
@SuppressWarnings(“unchecked”)
// <editor-fold defaultstate=”collapsed” desc=”Generated Code”>
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowActivated(java.awt.event.WindowEvent evt) {
formWindowActivated(evt);
}
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(new
javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED),
“Acciones”, javax.swing.border.TitledBorder.CENTER,
javax.swing.border.TitledBorder.DEFAULT_POSITION));
btnIdentificar.setText(“Identificar”);
btnIdentificar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnIdentificarActionPerformed(evt);
}
});
btnGuardar.setText(“Guardar”);
btnGuardar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnGuardarActionPerformed(evt);
}
});
btnSalir.setText(“Salir”);
btnSalir.setAlignmentY(0.0F);
btnSalir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSalirActionPerformed(evt);
}
});
PanelContenedor.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
“Huella Digital”, javax.swing.border.TitledBorder.CENTER,
javax.swing.border.TitledBorder.DEFAULT_POSITION));
PanelContenedor.setLayout(new java.awt.BorderLayout());
PanelContenedor.getAccessibleContext().setAccessibleParent(jPanel2);
pack();
}// </editor-fold>
/**
* @function: btnGuardarActionPerformed
* @author: Ricardo Rosero
* @access: private
* @return
*/
private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {
try {
//procedimientosSDK.guardarHuella();
//procedimientosSDK.guardarHuellaBackup();
procedimientosSDK.guardar();
} catch (GrFingerJavaException ex) {
Logger.getLogger(PantallaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* @function: btnSalirActionPerformed
* @author: Ricardo Rosero
* @access: private
* @return
*/
private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
}
/**
* @function: formWindowActivated
* @author: Ricardo Rosero
* @access: private
* @return
*/
private void formWindowActivated(java.awt.event.WindowEvent evt) {
this.PanelContenedor.add(this.crearPanelHuella());
}
/**
* @function: formWindowClosing
* @author: Ricardo Rosero
* @access: private
* @return
*/
private void formWindowClosing(java.awt.event.WindowEvent evt) {
}
/**
* @function: btnIdentificarActionPerformed
* @author: Ricardo Rosero
* @access: private
* @return
*/
private void btnIdentificarActionPerformed(java.awt.event.ActionEvent evt) {
try {
procedimientosSDK.identificarPersona();
} catch (GrFingerJavaException ex) {
Logger.getLogger(PantallaPrincipal.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* @atributos
* @author: Ricardo Rosero
* @access: private
*/
// Variables declaration – do not modify
private javax.swing.JPanel PanelContenedor;
private javax.swing.JButton btnGuardar;
private javax.swing.JButton btnIdentificar;
private javax.swing.JButton btnSalir;
private javax.swing.JPanel jPanel2;
// End of variables declaration
}
Clase Procedimientos
/**
* @package: procedimientos
* @class: Util
* @author: Ricardo Rosero
* @version: 1.0
*/
package procedimientos;
/**
* @librerias importadas
* @author: Ricardo Rosero
*/
import com.griaule.grfingerjava.FingerprintImage;
import com.griaule.grfingerjava.GrFingerJava;
import com.griaule.grfingerjava.GrFingerJavaException;
import com.griaule.grfingerjava.IFingerEventListener;
import com.griaule.grfingerjava.IImageEventListener;
import com.griaule.grfingerjava.IStatusEventListener;
import com.griaule.grfingerjava.MatchingContext;
import com.griaule.grfingerjava.Template;
import com.mysql.jdbc.Blob;
import interfaz.PantallaPrincipal;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import java.io.InputStream;
/**
* @function: Util
* @author: Ricardo Rosero
* @access: public
* @return
*/
public Util(PantallaPrincipal ui) {
this.ui = ui;
//Inicializa la conexión a la BD.
initDB();
}
/**
* @function: inicializarCaptura
* @author: Ricardo Rosero
* @access: public
* @return:
*/
public void inicializarCaptura() {
try {
fingerprintSDK = new MatchingContext();
//Inicializa la captura de huella digital.
GrFingerJava.initializeCapture(this);
}
catch (Exception e) {
//Si ocurre un error durante la inicialización se indica con un mensaje y se cierra la
aplicación.
e.printStackTrace();
System.exit(1);
}
}
/**
* @function: initDB
* @author: Ricardo Rosero
* @access: private
* @return
*/
private void initDB() {
try {
//Carga el driver ODBC
Class.forName(“com.mysql.jdbc.Driver”);
//Se conecta a la bd
dbConnection =
DriverManager.getConnection(“jdbc:mysql://localhost:3306/huellas”,”root”,
“rrosero1980″);
Statement stm = dbConnection.createStatement();
//Prepara las consultas/sentencias que se utilizarán
guardarStmt = dbConnection.prepareStatement(“INSERT INTO
huella(identificacion_usuario, nombres_usuario, huella1_usuario, huella2_usuario)
values(?,?,?,”)”);
guardar2 = dbConnection.prepareStatement(“update huella set huella2_usuario=?
where (identificacion_usuario=?)”);
identificarStmt = dbConnection.prepareStatement(“SELECT nombres_usuario,
huella1_usuario, huella2_usuario FROM huella”);
verificarStmt = dbConnection.prepareStatement(“SELECT huella1 FROM huella
WHERE nombres_usuario=?”);
verificarDatosUsuario = dbConnection.prepareStatement(“select * from huella where
identificacion_usuario=?”);
verificaCedulaUsuario = dbConnection.prepareStatement(“select
identificacion_usuario from huella where (identificacion_usuario=?)”);
verificaCedulaHuellaUsuario = dbConnection.prepareStatement(“select
identificacion_usuario, huella1_usuario from huella where
(identificacion_usuario=?)”);
verficaHuellaUsuario = dbConnection.prepareStatement(“selec * from huella where
(huella1_usuario=?)”);
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* @function: destroyDB
* @author: Ricardo Rosero
* @access: private
* @return
*/
private void destroyDB() {
try {
//Se cierran todas las sentencias
guardarStmt.close();
identificarStmt.close();
//Cierra la conexión a la base
dbConnection.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* @function: setFingerprintSDKNativeDirectory
* @author: Ricardo Rosero
* @access: public
* @return
*/
public static void setFingerprintSDKNativeDirectory(String directorio) {
File directory = new File(directorio);
try {
GrFingerJava.setNativeLibrariesDirectory(directory);
GrFingerJava.setLicenseDirectory(directory);
}
catch (GrFingerJavaException e) {
e.printStackTrace();
}
}
/**
* @function: onSensorPlug
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onSensorPlug(String idSensor) {
try {
//Comienza la captura con el lector conectado.
GrFingerJava.startCapture(idSensor, this, this);
}
catch (GrFingerJavaException e) {
//Indica si ha ocurrido un error con el lector.
e.printStackTrace();
}
}
/**
* @function: onSensorUnPlug
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onSensorUnplug(String idSensor) {
try {
GrFingerJava.stopCapture(idSensor);
}
catch (GrFingerJavaException e) {
//Indica si ha ocurrido un error con el lector.
e.printStackTrace();
}
}
/**
* @function: onImageAcquired
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onImageAcquired(String idSensor, FingerprintImage huellaDigital) {
//Almacena la imagen de la huella
this.fingerprint=huellaDigital;
//Muestra la imagen obtenida
ui.showImage(huellaDigital);
//Muestra la plantilla en la imagen actual
extract();
}
/**
* @function: extrac
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void extract() {
try {
//Extracts a template from the current fingerprint image.
template = fingerprintSDK.extract(fingerprint);
//display minutiae/segments/directions into image
ui.showImage(GrFingerJava.getBiometricImage(template,fingerprint));
}
catch (GrFingerJavaException e) {
e.printStackTrace();
}
}
/**
* @function: guardar
* @author: Ricardo Rosero
* @access: public
* @return
* @throws: GrFingerJavaException
*/
public void guardar() throws GrFingerJavaException{
fingerprintData = new ByteArrayInputStream(template.getData());
fingerprintDataLength = template.getData().length;
String cedula = JOptionPane.showInputDialog(“No. Identificacion:”);
boolean coinciden = false;
try{
verificaCedulaHuellaUsuario.setInt(1, Integer.parseInt(cedula));
ResultSet rs = verificaCedulaHuellaUsuario.executeQuery();
//ResultSet rs2 = verficaHuellaUsuario.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(2); //.getBytes(2);
//Crea una nueva plantilla
Template referenceTemplate = new Template(templateBuffer);
//compara las plantilas (actual vs bd)
coinciden = fingerprintSDK.verify(template,referenceTemplate);
if(coinciden){
JOptionPane.showMessageDialog(null, “La huella ya existe, coloque un dedo
diferente”);
}
else{
guardar2.setBinaryStream(1, fingerprintData, fingerprintDataLength);
guardar2.setInt(2, Integer.parseInt(cedula));
guardar2.execute();
JOptionPane.showMessageDialog(null, “Ha guarado la huella de backup”);
}
}
else if(!rs.next()){
String nombre = JOptionPane.showInputDialog(“Nombre y Apellido:”);
guardarStmt.setInt(1,Integer.parseInt(cedula));
guardarStmt.setString(2,nombre);
guardarStmt.setBinaryStream(3, fingerprintData, fingerprintDataLength);
guardarStmt.execute();
JOptionPane.showMessageDialog(null, “La huella ha sido guardada con exito”);
}
}
catch(SQLException sqlEx){
sqlEx.printStackTrace();
System.out.println(“Se produjo el siguiente error: “+sqlEx.getMessage());
}
}
/**
* @function: onFingerDown
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onFingerDown(String idSensor) {
}
/**
* @function: onFingerUp
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onFingerUp(String arg0) {
}
/**
* @function: onFingerUp
* @author: Ricardo Rosero
* @access: public
* @return
* @throws: GrFingerJavaException
*/
public void identificarPersona() throws GrFingerJavaException{
try{
//Obtiene todas las huellas de la bd
ResultSet rsIdentificar = identificarStmt.executeQuery();
//Si se encuentra el nombre en la base de datos
while(rsIdentificar.next()){
byte templateBuffer[] = rsIdentificar.getBytes(“huella1_usuario”);
Template referenceTemplate = new Template(templateBuffer);
if(referenceTemplate!=null){
//Lee la plantilla de la base de datos
boolean coinciden = fingerprintSDK.verify(template,referenceTemplate);
//Si encuentra correspondencia dibuja el mapa e indica el nombre de la persona que
coincidió.
if (coinciden){
JOptionPane.showMessageDialog(null, “Bienvenido
“+rsIdentificar.getString(“nombres_usuario”));
return;
}
}
}
//Si no encuentra alguna huella que coincida lo indica con un mensaje
JOptionPane.showMessageDialog(null, “No existe ningún registro que coincida con la
huella.”);
}
catch (SQLException e) {
System.out.println(“Se produjo el siguiente error: “+e.getMessage());
e.printStackTrace();
}
catch(GrFingerJavaException gr){
System.out.println(“Error con el scanner: “+gr.getMessage());
gr.printStackTrace();
}
}
}
Cabe recordar que esta clase es la más importante de todas, debido a que en esta clase
procedemos a conectar nuestro sistema de autenticacion con el motor de bases de datos
mySQL.
Clase LectorHuella
/**
* @package: lectorhuellas
* @class: Main
* @author: Ricardo Rosero
* @version: 1.0
*/
package lectorhuellas;
/**
* @librerias importadas
* @author: Ricardo Rosero
*/
import interfaz.PantallaPrincipal;
import java.io.File;
import procedimientos.Util;
– ——————————————————–
– Host: 127.0.0.1
– Server version: 5.1.36-community – MySQL Community Server (GPL)
– Server OS: Win32
– HeidiSQL version: 7.0.0.4053
– Date/time: 2012-03-29 13:47:53
– ——————————————————–