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.