En Argentina existen al menos dos redes de cobranzas extrabancarias (Rapipago y Pagofacil) que permiten el pago de facturas, servicios, etc. a través de formularios con códigos de barras que se emiten con una estructura particular para cada caso.
En primer lugar, a la cadena a codificar se le deben agregan 1 ó 2 dígitos de verificación al final. El algoritmo (en código VFP) para la generación de estos dígitos es el siguiente:
CLEAR lc = "1234567890123456789012345678901234567890" ? "Sin dígito de verificación...: " + lc ? "Con 1 dígito de verificación.: " + GenerarDigitoVerificador(lc, 1) ? "Con 2 dígitos de verificación: " + GenerarDigitoVerificador(lc, 2) FUNCTION GenerarDigitoVerificador(tcCadena, tn) *--- * Parámetros * tcCadena = Cadena a generar el/los dígito/s de verificación * tn = Cantidad de dígito/s de verificación (1 ó 2) * Retorno: * Caracter: La cadena mas el/los dígito/s de verificación *--- IF EMPTY(tn) OR NOT INLIST(tn, 1, 2) tn = 1 ENDIF tcCadena = ALLTRIM(tcCadena) LOCAL lnLen, lnIni, lnSum, lcSeq, lcRet lnLen = LEN(tcCadena) lcSeq = "1" + REPLICATE("3579", CEILING(lnLen/4)) lnSum = 0 FOR lnIni = 1 TO lnLen lnSum = lnSum + VAL(SUBSTR(tcCadena, lnIni, 1)) * VAL(SUBSTR(lcSeq, lnIni, 1)) ENDFOR lcRet = tcCadena + TRANSFORM(MOD(INT(lnSum / 2), 10)) IF tn = 2 tcCadena = ALLTRIM(lcRet) lnLen = LEN(tcCadena) lcSeq = "1" + REPLICATE("3579", CEILING(lnLen/4)) lnSum = 0 FOR lnIni = 1 TO lnLen lnSum = lnSum + VAL(SUBSTR(tcCadena, lnIni, 1)) * VAL(SUBSTR(lcSeq, lnIni, 1)) ENDFOR lcRet = tcCadena + TRANSFORM(MOD(INT(lnSum / 2), 10)) ENDIF RETURN lcRet ENDFUNC
Luego de añadir los dígitos de verificación, ya se puede generar el código de barra Interleved 2 of 5 (I2of5) o Código 128 C, que son los que utilizan ambas empresas.
Si desean realizar toda la tarea con Visual FoxPro, pueden utilizar la clase FoxBarcode que soporta ambas simbologías de códigos de barra. Si utilizan el código I2of5 se debe configurar la propiedadlAddCheckDigit
que no genere el dígito de control: (lAddCheckDigit = .F.
)
Luis María Guayán
Excelente artículo Luis María. Muchísimas gracias por el aporte!
ResponderBorrar