En un largo y minucioso artículo sobre el estándar que permite gestionar los mensajes en tiempo real entre compradores y bancos, Martin Ek analiza tanto las «piezas» que lo componen como las diferentes opciones que se presentan y cómo se llegó a ellas con el paso del tiempo.
Tal y como cuenta en ISO 8533, el lenguaje de las tarjetas de crédito, este estándar existe desde 1987, mientras que las tarjetas de crédito universales surgieron en 1950. Lo que el estándar controla es el formato y contenido de los mensajes, en una codificación compacta y minuciosa (eran otros tiempos y cada bit contaba), aunque hoy en día suelen ir encapsulados en un JSON (JavaScript Object Notation) de texto, mucho más legible para los humanos.
En cada mensaje en el ISO 8583 va incluido:
- Indicador de tipo de mensaje, como «autorización» o «devolución».
- Mapa de bits: Define qué campos están presentes en el mensaje.
- Campos de datos: Primitivos (los valores) o complejos (otros campos).
El papel de los mapas de bits es sumamente importante; básicamente codifican en sus bits si hay campos presentes o no (0 = no presente, 1 = presente). Así por ejemplo si el bitmap es 0110 0000 0000 0000, significa que solo estarán presentes a continuación los campos 2 (número de tarjeta) y 4 (cantidad de la transacción).
Hasta aquí la parte fácil, porque a medida que pasó el tiempo las cosas se fueron liando. Para empezar cada red de pagos (Visa, Mastercard, etcétera) retocó el estándar (¡ja!) según sus necesidades, algunas veces con variaciones significativas. Luego se incorporaron diversos formatos en la codificación: ASCII, EBCDIC o BCD compacto, con longitudes fijas o variables, todo para optimizar espacio. El resultado es que existen tanto el ISO 8583:1987 como los 1993 y 2003, que indican los años en que se introdujeron cambios y mejoras.
Una curiosidad es que la codificación EBCDIC (Extended Binary Coded Decimal Interchange Code, Código de intercambio decimal de código binario extendido) es en realidad un legado de los tiempos de los mainframes (!) Aunque hoy huele un poco a rancio frente al Unicode o incluso al ASCII, es la huella que quedó de la época en que IBM rulaba la informática.
¿Y lo que vemos impreso en el frontal de las propias tarjetas? Aunque podría pensarse que forma parte del estándar, la numeración de las tarjetas (técnicamente el número PAN, Primary Account Number) no es el ISO 8583 sino el ISO/IEC 7812. A mi me ha sorprendido al hojearlo que no todos los PAN tienen 16 dígitos, sino que pueden ser entre 13 y 19. Los primeros 6-8 dígitos son el emisor de la tarjeta (un banco o similar). El último dígito es un código de control, calculado con el algoritmo de Luhn, que también se emplea en los IMEI de los teléfonos móviles.