¿Cómo implemento un sistema con códigos de barras?

Quisiera saber como implemento un sistema con códigos de barras, es decir que la aplicación genere el código y lo imprima y que al leerlo se pueda realizar las consultas correspondientes al dato leído.

1 respuesta

Respuesta
1
Para imprimir códigos de barras primero lo que hay que hacer es "codificar" el valor que querés imprimir (que es distinto para cada tipo de código de barras) y después hay que imprimir ese valor con la fuente de código de barras que corresponda. El tipo de código de barras que elijas, dependerá del tipo de información que necesites imprimir. Algunos tipos solo permiten números, otros números y letras, otros cualquier carácter, algunos tienen una longitud máxima mayor que otros, otros tienen una longitud fija.
Por ejemplo, te muestro como se debería hacer si querés imprimir un código en Interleaved 2 of 5 (que es uno de los tantos tipos)
* FUNCTION _StrToI2of5(tcString) * INTERLEAVED 2 OF 5
*------------------------------------------------------
* Convierte un string para ser impreso con
* fuente True Type "PF Interleaved 2 of 5"
* ó "PF Interleaved 2 of 5 Wide"
* ó "PF Interleaved 2 of 5 Text"   
* Solo caracteres numéricos
* USO: _StrToI2of5('1234567890')
* RETORNA: Caracter
*------------------------------------------------------

FUNCTION _StrToI2of5(tcString)
  LOCAL lcStart, lcStop, lcRet, lcCheck, lcCar, lnLong, lnI, lnSum, lnAux
  lcStart = CHR(40)
  lcStop = CHR(41)
  lcRet = ALLTRIM(tcString)
  *--- Genero dígito de control
  lnLong = LEN(lcRet)
  lnSum = 0
  lnCount = 1
  FOR lnI = lnLong TO 1 STEP -1
    lnSum = lnSum + VAL(SUBSTR(lcRet,lnI,1)) * IIF(MOD(lnCount,2) = 0,1,3)
    lnCount = lnCount + 1
  ENDFOR
  lnAux = MOD(lnSum,10)
  lcRet = lcRet + ALLTRIM(STR(IIF(lnAux = 0,0,10 - lnAux)))
  lnLong = LEN(lcRet)
  *--- La longitud debe ser par
  IF MOD(lnLong,2) # 0
    lcRet = '0' + lcRet
    lnLong = LEN(lcRet)
  ENDIF
  *--- Convierto los pares a caracteres
  lcCar = ''
  FOR lnI = 1 TO lnLong STEP 2
    IF VAL(SUBS(lcRet,lnI,2)) < 50
      lcCar = lcCar + CHR(VAL(SUBS(lcRet,lnI,2)) + 48)
    ELSE
      lcCar = lcCar + CHR(VAL(SUBS(lcRet,lnI,2)) + 142)
    ENDIF
  ENDFOR
  *--- Armo código
  lcRet = lcStart + lcCar + lcStop
  RETURN lcRet
ENDFUNC

Si vos necesitás imprimir un número (por ejemplo 1234567890) llamás a esta función:
CadI25 = _StrToI2of5("1234567890")
Y en la variable CadI25 vas a tener la cadena codificada que tenés que imprimir usando la fuente que te dice en la cabecera de la función.
Por acá no puedo enviarte las fuentes, por lo que si no las conseguís, pásame un correo donde enviártelas y si querés también te mando más funciones para otros tipos de códigos de barra.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas