Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Funciones para crear/comprobar un codigo de barras

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Funciones para crear/comprobar un codigo de barras Responder citando

Estas funciones generan un código de barras y comprueban la validez de un numero según el estandar EAN13.

Los numeros generados no tienen en cuenta el país ni nada de eso (las creé para un proyecto de almacen, donde se necesitaba numerar distintos articulos con una numeración propia).

La función GenerarEAN13, lo que hace es poner en la variable CodigoBarras los caracteres necesários para que al imprimirlos con una fuente EAN-13 aparezca el codigo de barras correcto.

La función ValidarEAN13 verifica que la cadena de texto contiene un número válido. (Al leer con la pistola, el numero leido deberá almacenarse en un edit o celda, y deberá ser comprobado antes de continuar con la operativa)

//----------------------------------------------------------------------------
void GenerarEAN13(char *CodigoBarras, int Codigo)
// Genera una cadena de texto con el código EAN correspondiente al código dado.
{
char LeftHandA[11] = "0123456789";
char RightHand[11] = "PQRSTUVWXY";
char Check[11] = "pqrstuvwxy";
char ParteDerecha[6] = "";
char ParteIzquierda[6] = "";
int i, Suma, CheckSum = 0, SumaPar = 0,SumaImpar = 0;
bool Par = false;

sprintf(CodigoBarras, "00%010d", Codigo);
for(i=0; i<12; i++){
// Recorremos todos los digitos para calcular el digito de control.
if(Par == true){
// Digito en posicion par.
SumaPar = (SumaPar + CodigoBarras[i] - 48 );
}else{
// Digito en posicion impar.
SumaImpar = (SumaImpar + CodigoBarras[i] - 48 );
}
Par = !Par;
}
SumaPar = (SumaPar * 3);
Suma = (SumaPar + SumaImpar);
CheckSum = (10 - (Suma % 10));
if(CheckSum == 10){
// El digito de control es de una sola cifra.
CheckSum = 0;
}
for(i=2; i<7; i++){
// Generamos la parte izquierda del código de barras.
ParteIzquierda[i-2] = LeftHandA[(CodigoBarras[i] - 48 )];
}
ParteIzquierda[6] = '\0';
for(i=7; i<12; i++){
// Generamos la parte derecha del código de barras.
ParteDerecha[i-7] = RightHand[(CodigoBarras[i] - 48 )];
}
ParteDerecha[6] = '\0';
sprintf(CodigoBarras, "!`%s|%s%c", ParteIzquierda, ParteDerecha, Check[CheckSum]);
}
//---------------------------------------------------------------------------
bool ValidarEAN13(char CodBarra[])
// Verifica si la cadena de texto contiene un número codificado en formato EAN-13
{
char* Factor = "131313131313";
int Acum = 0, Dig = 0, i;

for (i=0; i<12; i++){
Acum+=(CodBarra[i]-'0')*(Factor[i]-'0');
}
Dig = (Acum % 10);
if(Dig){
Dig=10-Dig;
}
return (Dig==(CodBarra[12]-'0'));
}
//---------------------------------------------------------------------------
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

donde aparece la cara sonriendo, debería estar restado el valor numerico 48:


SumaPar = (SumaPar + CodigoBarras[i] - 48 ) ;
SumaImpar = (SumaImpar + CodigoBarras[i] - 48 ) ;
ParteIzquierda[i-2] = LeftHandA[(CodigoBarras[i] - 48 ) ] ;
ParteDerecha[i-7] = RightHand[(CodigoBarras[i] - 48 ) ] ;
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

ya está arreglado lo de la cara soniendo...

Recuerden q si dejan habilitados los Smilies y escriben

8 ) (sin el espacio)


saldrá este simpático personaje

Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.