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

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Dom 07 Nov, 2004 5:22 pm Asunto: EAN 13 |
|
|
Alguien dispone de una función para transformar un codigo de barras EAN13 en la cadena de texto que con la fuente EAN13 permite que se visualize tal y como los conocemos.
Gracias. |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Dom 07 Nov, 2004 8:04 pm Asunto: |
|
|
El lector de codigo de barras decodifica EL CODIGO QUE TENGA ENFRENTE y lo convierte a "teclado" _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Dom 07 Nov, 2004 8:26 pm Asunto: Gracias |
|
|
Me refiero a que he de generar EAN13 tengo un numero, pongamos que tengo :
779123401234 y quiero imprimir su correspondiente codigo de barras!!
He de poner el codigo de control detras i despues transformar los numeros al formato que la fuente EAN13 reconoce para poder imprimir.
Pos eso, que no encuentro nada .... |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Dom 07 Nov, 2004 9:17 pm Asunto: |
|
|
Yo lo tengo hecho en builder, lo traduje de un código en FoxPro, y funciona perfectamente lo he probado imprimiendo con Laser y luego leyendolo con lectores de calidad tipo Metrologic. En cuanto encuentre el código lo pego por aquí.
ciao. _________________ OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins. |
|
| Volver arriba |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Dom 07 Nov, 2004 9:27 pm Asunto: GrACIAS |
|
|
Yo también he encontrado un codigo pero lo de STUFF() me ha detenido!!
| Código: |
FUNCTION _StrToEan13(tcString, tlCheckD)
LOCAL lcLat, lcMed, lcRet, lcJuego, ;
lcIni, lcResto, lcCod, ;
lnI, lnCheckSum, lnAux, laJuego(10), lnPri
lcRet=ALLTRIM(tcString)
IF LEN(lcRet) # 12
*--- Error en parámetro
*--- debe tener un len = 12
RETURN ""
ENDIF
*--- Genero dígito de control
lnCheckSum=0
FOR lnI = 1 TO 12
IF MOD(lnI,2) = 0
lnCheckSum = lnCheckSum + VAL(SUBS(lcRet,lnI,1)) * 3
ELSE
lnCheckSum = lnCheckSum + VAL(SUBS(lcRet,lnI,1)) * 1
ENDIF
ENDFOR
lnAux = MOD(lnCheckSum,10)
lcRet = lcRet + ALLTRIM(STR(IIF(lnAux = 0, 0, 10-lnAux)))
IF tlCheckD
*--- Si solo genero dígito de control
RETURN lcRet
ENDIF
*--- Para imprimir con fuente True Type EAN13
*--- 1er. dígito (lnPri)
lnPri = VAL(LEFT(lcRet, 1))
*--- Tabla de Juegos de Caracteres
*--- según "lnPri" (¡NO CAMBIAR!)
laJuego(1) = "AAAAAACCCCCC" && 0
laJuego(2) = "AABABBCCCCCC" && 1
laJuego(3) = "AABBABCCCCCC" && 2
laJuego(4) = "AABBBACCCCCC" && 3
laJuego(5) = "ABAABBCCCCCC" && 4
laJuego(6) = "ABBAABCCCCCC" && 5
laJuego(7) = "ABBBAACCCCCC" && 6
laJuego(8) = "ABABABCCCCCC" && 7
laJuego(9) = "ABABBACCCCCC" && 8
laJuego(10) = "ABBABACCCCCC" && 9
*--- Caracter inicial (fuera del código)
lcIni = CHR(lnPri + 35)
*--- Caracteres lateral y central
lcLat = CHR(33)
lcMed = CHR(45)
*--- Resto de los caracteres
lcResto = SUBS(lcRet, 2, 12)
FOR lnI = 1 TO 12
lcJuego = SUBS(laJuego(lnPri + 1), lnI, 1)
DO CASE
CASE lcJuego = "A"
lcResto = STUFF(lcResto, lnI, 1, CHR(VAL(SUBS(lcResto, lnI, 1))+48))
CASE lcJuego = "B"
lcResto = STUFF(lcResto, lnI, 1, CHR(VAL(SUBS(lcResto, lnI, 1))+65))
CASE lcJuego = "C"
lcResto = STUFF(lcResto, lnI, 1, CHR(VAL(SUBS(lcResto, lnI, 1))+97))
ENDCASE
ENDFOR
*--- Armo código
lcCod = lcIni + lcLat + SUBS(lcResto,1,6) + lcMed + SUBS(lcResto,7,6) + lcLat
RETURN lcCod
ENDFUNC
|
Gracias por vuestra ayuda, a ver si la encuentras XyVy yo voy mirando la de DELPHI a ver si hoy puedo dormir tranquilo.
PD: Que fuente es la correcta, porque encuentro varias, tipo :
BC EAN13 HR
BC EAN13 TALL
Gracias de nuevo!! |
|
| Volver arriba |
|
 |
amas2 Lt

Registrado: 01 Jun 2004Mensajes: 91
|
Publicado: Lun 08 Nov, 2004 10:07 am Asunto: Bueno!! |
|
|
La cosa quedaria así:
Función que genera un codigo de barras EAN13:
| Código: |
//---------------------------------------------------------------------------
AnsiString TForm1::StrToEan13(AnsiString tcString,bool tlCheckD)
{
int lnCheckSum=0;AnsiString retorno;
TStringList *laJuego = new TStringList;
int lnAux,lnPri;
char lcIni,lcLat,lcMed,lcJuego;
AnsiString lcResto;
AnsiString cadena= tcString.Trim();
if(cadena.Length()!=12) return "";
for(int i=1;i<=12;i++){
if(i % 2 ==0 ) lnCheckSum = lnCheckSum + (cadena.SubString(i,1).ToInt()*3);
else lnCheckSum = lnCheckSum + (cadena.SubString(i,1).ToInt()*1);
}
lnAux = lnCheckSum % 10;
if(lnAux==0) cadena = cadena + AnsiString(0);
else cadena= cadena + AnsiString(10-lnAux);
lnPri = cadena.SubString(1,1).ToInt();
laJuego->Add("!!");
laJuego->Add("AAAAAACCCCCC");
laJuego->Add("AABABBCCCCCC");
laJuego->Add("AABBABCCCCCC");
laJuego->Add("AABBBACCCCCC");
laJuego->Add("ABAABBCCCCCC");
laJuego->Add("ABBAABCCCCCC");
laJuego->Add("ABBBAACCCCCC");
laJuego->Add("ABABABCCCCCC");
laJuego->Add("ABABBACCCCCC");
laJuego->Add("ABBABACCCCCC");
lcIni = Char(lnPri + 35);
lcLat = Char(33);
lcMed = Char(45);
AnsiString lcJoc;
lcResto = cadena.SubString(2,12);
for(int i=1;i<=12;i++){
lcJoc = laJuego->Strings[lnPri+1].SubString(i,1);
if(lcJoc=="A"){
lcResto = lcResto.Insert(Char(lcResto.SubString(i,1).ToInt()+48),i);
lcResto = lcResto.Delete(i+1,1);
}
if(lcJoc=="B"){
lcResto = lcResto.Insert(Char(lcResto.SubString(i,1).ToInt()+65),i);
lcResto = lcResto.Delete(i+1,1);
}
if(lcJoc=="C"){
lcResto = lcResto.Insert(Char(lcResto.SubString(i,1).ToInt()+97),i);
lcResto = lcResto.Delete(i+1,1);
}
}
retorno = AnsiString(lcIni)+AnsiString(lcLat)+ lcResto.SubString(1,6)+AnsiString(lcMed)+lcResto.SubString(7,6)+ AnsiString(lcLat);
return retorno;
}
|
Taducida de una función en VisualFoxPro de Luis María Guayán - Tucumán - Argentina
Se usa por ejemplo : Edit3->Text = this->SrToEan13("978843057790",true); Como podeis ver el booleano de momento està de adorno, lo he dejado para poder quitar o no el ultimo digito del Ean13 si este nos lo dan con el digito de control incluido.
Con el tipo de letra EanP36Tt o EanP72Tt. La cosa funciona!!!
Eso si de momento no puedo imprimir por culpa de la dichosa configuración de QuickReport y una laser Xerox!! |
|
| 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.
|