Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Necesito Orientacion Calculo de digito verificador EAN 13 al ingresar nuevo registro

Estas en el tema de Necesito Orientacion Calculo de digito verificador EAN 13 al ingresar nuevo registro en el foro de Mysql en Foros del Web. Hola que tal agradesco de antemano la atencion y colaboracion para que me puedan orientar o ayudar sobre como hacer que al ingresar un nuevo ...
  #1 (permalink)  
Antiguo 21/04/2012, 13:13
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
Pregunta Necesito Orientacion Calculo de digito verificador EAN 13 al ingresar nuevo registro

Hola que tal agradesco de antemano la atencion y colaboracion para que me puedan orientar o ayudar sobre como hacer que al ingresar un nuevo registro el campo barcode se actualice automaticamente con el digito verificador a continuacion posteo el script que uso para crear la tabla

CREATE TABLE BC_ARTICULOS (ID MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
ID_ART SMALLINT (9),
TALLA VARCHAR(9),
BARCODE VARCHAR (20),
ESTATUS INT(2),
FECHA_ALTA TIMESTAMP ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (ID),

el campo barcode seria 750000000000 + el valor de el campo id y al final el digito verificador basado en ean 13 , no se si se pueda setear con la clausula default , desconosco como podria setearlo a travez de una funcion o procedimiento

posteo lo que encontre sobre como se calcula el digito verificador

Dígito de control. Para comprobar el dígito de control (por ejemplo, por el ordenador y el escáner de código de barras), se suman los dígitos de las posiciones pares, el resultado se multiplica por 3, se le suman los dígitos de las posiciones impares y este resultado se le resta a su múltiplo de 10 más próximo. El resultado final ha de coincidir con el dígito de control.
Por ejemplo, para 123456789041 el dígito de control será:
Suma de los números en los lugares pares: 2+4+6+8+0+1 = 21
Multiplicado x 3: 21 x 3 = 63
Suma de los números en los lugares impares: 1+3+5+7+9+4 = 29
Suma total: 63 + 29 = 92
Próximo múltiplo de 10 = 100
Dígito de control: 100 - 92 = 8

gracias señores nuevamente y quedo al pendiente , si alguno me pudiera orientar como hacerlo o implementarlo en un procedimiento estaria muy agradecido
  #2 (permalink)  
Antiguo 21/04/2012, 16:11
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Respuesta: Necesito Orientacion Calculo de digito verificador EAN 13 al ingresar nuev

Hola fahs82,

Una opción es usar 19.3. Using Triggers (disparadores) y en el trigger aplicar una implementación como la siguiente EAN13 Check (ajustando aquello que sea necesario).

Espero te sea útil.
  #3 (permalink)  
Antiguo 21/04/2012, 16:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Necesito Orientacion Calculo de digito verificador EAN 13 al ingresar nuev

¿Por qué quieres hacer la verificación del dato en MySQL?
Los lenguajes de programación tienen mejores recursos de los que tiene el SQL para realizar esa tarea.
A mi entender es una mala práctica darle a la base responsabilidades que no tiene por qué tener, simplemente para ahorrarte trabajo de programación. Piensa que es mucho más facil conseguir librerías o ejemplos en PHP, C#, VB.Net y otros para hacer esa verificación, que en SQL... Por algo será...
¿No te parece?

Como será de sencillo hacerlo en un lenguaje de programación, que incluso en Wikipedia puedes encontrar, bajo el articulo dedicado al EAN 13, ejemplos de código para Perl, Php, C#, Python, Visual Basic, Javascript y hasta ABAP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 23/04/2012, 12:43
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
Respuesta: Necesito Orientacion Calculo de digito verificador EAN 13 al ingresar nuev

muchas gracias wchiquito creo que es lo que andaba buscando es muy similar al codigo que habia estado desarrollando para el trigger solo me falta lo del redondeo de multiplo y las operaciones finales , el link del codigo que me pasaste lo voy a adaptar ya que el mio si esta bastante extenso

DELIMITER |

CREATE TRIGGER actcodigo AFTER INSERT ON BC_ARTICULOS
FOR EACH ROW BEGIN
DECLARE VERIF INT DEFAULT 0;
DECLARE PARES INT DEFAULT 0;
DECLARE NONES INT DEFAULT 0;
DECLARE MULTI INT DEFAULT 3;
DECLARE SUMA INT DEFAULT 0;
DECLARE X INT DEFAULT 0;
DECLARE NUMPREV INT DEFAULT 750000000000;

DECLARE A INT DEFAULT 0;
DECLARE B INT DEFAULT 0;
DECLARE C INT DEFAULT 0;
DECLARE D INT DEFAULT 0;
DECLARE E INT DEFAULT 0;
DECLARE F INT DEFAULT 0;
DECLARE G INT DEFAULT 0;
DECLARE H INT DEFAULT 0;
DECLARE I INT DEFAULT 0;
DECLARE J INT DEFAULT 0;
DECLARE K INT DEFAULT 0;
DECLARE L INT DEFAULT 0;

SET NUMPREV = NUMPREV + ID;
SET X = LENGTH(NUMPREV);

SET A = SUBSTRING(NUMPREV, X , 1);
SET B = SUBSTRING(NUMPREV, X , 2);
SET C = SUBSTRING(NUMPREV, X , 3);
SET D = SUBSTRING(NUMPREV, X , 4);
SET E = SUBSTRING(NUMPREV, X , 5);
SET F = SUBSTRING(NUMPREV, X , 6);
SET G = SUBSTRING(NUMPREV, X , 7);
SET H = SUBSTRING(NUMPREV, X , 8);
SET I = SUBSTRING(NUMPREV, X , 9);
SET J = SUBSTRING(NUMPREV, X , 10);
SET K = SUBSTRING(NUMPREV, X , 11);
SET L = SUBSTRING(NUMPREV, X , 12);

SET PARES = (B+D+F+H+J+L) * 3;
SET NONES = (A+C+E+G+I+K);

SET SUMA = (PARES + NONES)


UPDATE BC_ARTICULOS SET BARCODE = NUMPREV + 1 WHERE ID = NEW.ID;
END
|

DELIMITER ;

y el motivo por el cual lo estoy haciendo asi en mysql es por dos motivos , el sistema que habia programado anteriormente fue en vb y actualmente estoy rehaciendolo pero en java y asi en futuros cambios o ajustes no tendria que reescribir o adaptar el codigo a cada lenguaje y debido a que debo hacer multiples inserts debido a que un producto nuevo que inserto me genera varias series y el metodo a travez del trigger en la bd me generaria varios pasos adicionales para poder generar el verificador , es decir tendria que ejecutar un select , listar los ids de cada uno , ejecutar la rutina por cada uno y hacer un update por cada elemento de la lista lo que en la practica al implementar algo similar ya me provoco que la velocidad y los resultados no fueran los optimos para mi aplicacion , cuando tenga resuelto el codigo posteare el codigo completo y explicacion para ayuda de los compañeros que tambien asi lo necesiten de nuevo les agradesco mucho y seguimos al pendiente
  #5 (permalink)  
Antiguo 24/04/2012, 11:20
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
De acuerdo Respuesta: Necesito Orientacion Calculo de digito verificador EAN 13 al ingresar nuev

muy bien ya resolvi la query y posteo el codigo en una forma mas limpia e intentare explicarla de una forma clara agradesco al compañero que me oriento con el codigo del check a continuacion posteo el codigo y la explicacion

primero ver la ecuacion para sacar el verificador

ejemplo

codigo 123456789012
primero
sumamos los numeros en posicion par y el resultado lo multiplicamos por 3

2+4+6+8+0+2 = 22 * 3 = 66

segundo
despues sumamos los numeros en posicion non
1+3+5+7+9+1 = 26

tercero
los dos resultados los sumamos
66+26 = 92

Se busca decena inmediatamente superior y se le resta el resultado obtenido. El resultado final es el dígito de control. Si el resultado es múltiplo de 10 el dígito de control será 0.
y al final determinamos el Próximo múltiplo de 10
del resultado = 100
Dígito de control: 100 - 92 = 8


implementandolo en mysql

funciones a utilizar
resta
substr
mod
en un query

en mi caso la tabla de la cual extraigo la consulta se llama bc_articulos y el campo donde se encuentran los 12 digitos del codigo se llama barcode

asi que con la siguiente query obtengo el verificador

select 10-(((substr(barcode,2,1)+substr(barcode,4,1)+substr( barcode,6,1)+substr(barcode,8,1)+substr(barcode,10 ,1)+substr(barcode,12,1))*3)+((substr(barcode,1,1) +substr(barcode,3,1)+substr(barcode,5,1)+substr(ba rcode,7,1)+substr(barcode,9,1)+substr(barcode,11,1 ))))mod 10 from bc_articulos

si alguien lo necesita puede modificar el codigo a su necesidad y utilizarlo en un trigger o en un update espero le sea de utilidad a quien lo necesite ya que como yo no encontre casi informacion ni codigo de como aplicarlo , si tienen duda pueden consultarme

Etiquetas: codigodebarras, ean13
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:05.