 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
jb_______ Cdt

Registrado: 22 Dic 2003Mensajes: 21
|
Publicado: Sab 24 Abr, 2004 7:50 pm Asunto: Funciones para crear/comprobar un codigo de barras |
|
|
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 |
|
 |
jb_______ Cdt

Registrado: 22 Dic 2003Mensajes: 21
|
Publicado: Sab 24 Abr, 2004 7:53 pm Asunto: |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Dom 25 Abr, 2004 2:56 am Asunto: |
|
|
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
 |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|