Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-09-2005
JulioGO JulioGO is offline
Miembro
 
Registrado: ago 2004
Posts: 94
Poder: 20
JulioGO Va por buen camino
Question Para expertos en codigo de barras

Hola forofos:

Estoy desarrollando una aplicación en Delphi para una biblioteca, y para poder codificar los libros se ha elegido el codigo de barras, el cual necesita de una cadena de digitos los cuales son generados por una función. aqui el codigo de la funcion(en VFP)

Código:
  
* FUNCTION _StrToEan13(tcString,.T.) * CODIGO EAN-13

*------------------------------------------------------

* Convierte un string para ser impreso con

* fuente True Type "PF EAN P36" ó "PF EAN P72"

* PARAMETROS:

*   tcString: Caracter de 12 dígitos (0..9)

*   tlCheckD: .T. Solo genera el dígito de control

*			 .F. Genera dígito y caracteres a imprimir

* USO: _StrToEan13('123456789012')

* RETORNA: Caracter

*------------------------------------------------------

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 largo = 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 PF_EAN_PXX

  *--- 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

*------------------------------------------------------

* FUNCTION _StrToEan8(tcString,.T.) * CODIGO EAN-8

*------------------------------------------------------

* Convierte un string para ser impreso con

* fuente True Type "PF EAN P36" ó "PF EAN P72"

* PARAMETROS:

*   tcString: Caracter de 7 dígitos (0..9)

*   tlCheckD: .T. Solo genera el dígito de control

*			 .F. Genera dígito y caracteres a imprimir

* USO: _StrToEan8('1234567')

* RETORNA: Caracter

*------------------------------------------------------

FUNCTION _StrToEan8(tcString,tlCheckD)

  LOCAL lcLat, lcMed, lcRet, ;

	lcIni, lcCod, lnI, ;

	lnCheckSum, lnAux

  lcRet = ALLTRIM(tcString)

  IF LEN(lcRet) # 7

	*--- Error en parámetro

	*--- debe tener un largo = 7

	RETURN ''

  ENDIF

  *--- Genero dígito de control

  lnCheckSum = 0

  FOR lnI = 1 TO 7

	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 PF_EAN_PXX

  *--- Caracteres lateral y central

  lcLat = CHR(33)

  lcMed = CHR(45)

  *--- Caracteres

  FOR lnI = 1 TO 8

	IF lnI <= 4

	  lcRet = STUFF(lcRet,lnI,1,CHR(VAL(SUBS(lcRet,lnI,1)) + 48))

	ELSE

	  lcRet = STUFF(lcRet,lnI,1,CHR(VAL(SUBS(lcRet,lnI,1)) + 97))

	ENDIF

  ENDFOR

  *--- Armo código

  lcCod = lcLat + SUBS(lcRet,1,4) + lcMed + SUBS(lcRet,5,4) + lcLat

  RETURN lcCod

ENDFUNC
Pero mi dilema es como genero la cadena la cual al ser enviada a una de estas funciones me generará el dichoso codigo de barras. Otra consulta cual formato uso para codificar los libros el EAN8, EAN13 u otro.

Espero haber sido claro en la consulta.

Saludos
Responder Con Cita
  #2  
Antiguo 29-09-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por JulioGO
Código:
  
 * FUNCTION _StrToEan13(tcString,.T.) * CODIGO EAN-13
 *------------------------------------------------------
 * Convierte un string para ser impreso con
 * fuente True Type "PF EAN P36" ó "PF EAN P72"
 * PARAMETROS:
 *   tcString: Caracter de 12 dígitos (0..9)
 *   tlCheckD: .T. Solo genera el dígito de control
 *			 .F. Genera dígito y caracteres a imprimir
 * USO: _StrToEan13('123456789012')
 * RETORNA: Caracter
 *------------------------------------------------------
Creo que ese código es de un lenguaje xBase, probablemente Clipper, no delphi.

Cita:
Pero mi dilema es como genero la cadena la cual al ser enviada a una de estas funciones me generará el dichoso codigo de barras. Otra consulta cual formato uso para codificar los libros el EAN8, EAN13 u otro.
La cadena con el código lo tendrás que leer del artículo o en todo caso crearlo tú mismo.

Si usas el EAN13 deberás generar un código de máximo 12 caracteres más el de control.

Te recuerdo que casi todos los generadores de informes incorporan la posibilidad de convertir el código pasado a código de barras, ejemplo: si tienes un artículo con código: 123456789012 descripción: Don Quijote de La Mancha, en el generador de informes pones un componente "código de barras" y él solito te lo imprimirá con las barras correspondientes.

Si quieres validar que sea un código correcto puedes echar un vistazo al truco 465 de trucomanía

Creo que tu pregunta era esa, espero haberme explicado bien.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:22:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi