Todo Sobre ISO8583

¿Qué es y en qué consiste?

Para entender que es ISO8583 en una forma práctica y simple, un mensaje ISO8583 es una cadena de caracteres (STRING) que consiste de tres partes:

  1. MTI - Message Type Indicator (Indicador de mensaje): Campo numérico de 4 dígitos, indica tipo de mensaje.
  2. BITMAP - mapa en bits: Este es un campos de 16 o 32 dígitos hexadecimal. Cuando el largo del bitmap es 16, el bitmap sólo contiene el bitmap primario, cuando es de largo 32, el bitmap contiene tanto el bitmap primario como el secundario. El primer bit del primer dígito indica si el bitmap cuanta con el bitmap secundario.
  3. Datos - corresponden a los campos de datos definidos por el BITMAP.




Ejemplo de un mensaje ISO8583

    02004200040000000002161234567890123456060
    9173030123456789ABC1000123456789012345678
    90123456789012345678901234567890123456789
    0123456789012345678901234567890123456789
Donde:
    0200 - MTI (indicador de mensaje),
    4200040000000002 - bitmap primario,
    1234567890123456 - campo 2,
    0609173030 - campo 7,
    123456789ABC - campo 22,
    012345678901234567890123456789012345678901234567890\
    1234567890123456789012345678901234567890123456789 - campo 63.

¿Para que sirve?

Los mensaje de tipo ISO8583 se utilizan en las transacciones bancarias y/o financieras.


Definición de ISO8583

Para cada campo (también llamado bit), existe una definición única y específica de su uso. Algunos campos son de largo fijo y otros de largo variable, estos últimos comienzan con un indicador de longtitud. Un conjunto de definiciones de campos (128 máximo) forma una definición de ISO8583.

Es importante tener en cuenta que un mensaje ISO8583 sólo funcionará contra su propia definición. Existe una definición estandar de ISO8583, pero en el uso real, muchas empresas la modifican y generan su propia definición de ISO8583. Por lo tanto, un mensaje ISO8583 puede ser válido para una definición pero inválida para otra.


¿Que herramienta se debe tener para trabaja con ISO8583?

Desde el punto de vista de la implementación de ISO8583, debe contar con siguientes funcionalidades:

  1. Parser (analizador sintáctico, también llamado unpacker) de ISO8583: el rol del parser es validar y convertir un mensaje ISO8583 a un juego de campos y valores que puedan ser procesados. La validación y conversión se realiza contra una definición específica de ISO8583. Clic aquí
  2. Pack (empaquetar) ISO8583: el rol de Pack es construir un mensaje ISO8583 a partir de un conjunto de campos y valores separados. Aquí también la construcción de un mensaje ISO8583 se realiza contra una definición específica de ISO8583.
  3. Un ISO8583 Bitmap Dumper: Herramienta para mostrar que campos vienen en un bitmap. Click aquí
  4. Un ISO8583 Message dumper: Herramienta para desplegar campos de un mensaje ISO8583. Esta herramienta te facilitará el análisis de los campos que componen un mensaje ISO8583. Un análisis hecho a mano requiere de 3 a 20 minutos, según el tamaño del mensaje, con ayuda de esta herramienta, se realizará al instante. Click aquí
  5. Un Personalizador de Definición ISO8583: Herramienta que te permite crear una nueva definición de ISO8583 para tu propio uso. Click aquí


Campos típicos de un mensaje ISO8583

Un mensaje típico podría incluir los siguientes campos:

  1. MTI - Message Type Indicator - indicador de tipo de mensaje.
  2. Bit 2 - Número de cuenta primaria
  3. Bit 3 - Código de Procesamiento
  4. Bit 7 - Fecha y hora de la transmisión
  5. Bit 11 - Código de auditoría
  6. Bit 12 - Hora local de transacción
  7. Bit 13 - Fecha local de transacción
  8. Bit 32 - Código de identificación de la institución de adquisición
  9. Bit 38 - El código de autorización como respuesta
  10. Bit 39 - Código de respuesta
  11. Bit 49 - Código de moneda de la transación

Diferentes formatos de Mensaje ISO8583

Un sistema de tipo switch, que rutea (route) transacciones desde POS/ATM o WEB hacia diferentes bancos y/o instituciones financieras, debe ser capaz de procesar diferentes tipos de ISO8583. Existen varios tipos de formato de intercambio de mensajería ISO8583, pero se pueden clasificar en dos grupos: en ASCII o en Binario


Para un ISO8583 como este

[000] [0200]
[002] [1234567890123456]
[007] [20100609173030]
[022] [ABC123]
[063] [012345678901234567890123456789012345678901234567890\
1234567890123456789012345678901234567890123456789]
  1. Mensaje ISO8583 en base de ASCII

    En formato ASCII, este mensaje ISO8583 se ve así:

    00000000H 30 32 30 30 34 32 30 30 30 34 30 30 30 30 30 30 0200420004000000
    00000010H 30 30 30 32 31 36 31 32 33 34 35 36 37 38 39 30 0002161234567890
    00000020H 31 32 33 34 35 36 30 36 30 39 31 37 33 30 33 30 1234560609173030
    00000030H 41 42 43 31 32 33 20 20 20 20 20 20 31 30 30 30 ABC123......1000
    00000040H 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 1234567890123456
    00000050H 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31 32 7890123456789012
    00000060H 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 3456789012345678
    00000070H 39 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 9012345678901234
    00000080H 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 5678901234567890
    00000090H 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 1234567890123456
    000000a0H 37 38 39                                        789
    

    Este tipo de mensaje ISO8583 es más fácil de transportar desde un ambiente a otro, también se llamas zonas. A diferencia de los ISO8583 de tipo binario, el que muchas veces debe ser codificado para ser transportado a otras zonas. La desventaja de los mensajes en base ASCII es que el largo total del mensaje es más largo que el de los binarios.

  2. Mensajes ISO8583 en base binario

    El mismo mensaje ISO8583, en formato binario, se ve así:

    00000000H 02 00 42 00 04 00 00 00 00 02 16 12 34 56 78 90 ..B.........4Vx.
    00000010H 12 34 56 06 09 17 30 30 41 42 43 31 32 33 20 20 .4V...00ABC123..
    00000020H 20 20 20 20 01 00 30 31 32 33 34 35 36 37 38 39 ......0123456789
    00000030H 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 0123456789012345
    00000040H 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30 31 6789012345678901
    00000050H 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 2345678901234567
    00000060H 38 39 30 31 32 33 34 35 36 37 38 39 30 31 32 33 8901234567890123
    00000070H 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 4567890123456789
    00000080H 30 31 32 33 34 35 36 37 38 39                   0123456789
    

    Claramente, el largo del mismo mensaje ISO8583 en formato binario es más corto que en formato ASCII. Para utilizar el formato binario, existe una exigencia de "padding". En el ejemplo anterior, el campo 63 es tipo LLLVAR, por lo tanto en formato ASCII se comienza por "1000123456...." donde 100 es el largo, y el STRING es "0123456....." corresponde al dato. En formato binario, el tipo LLLVAR se convierte a "01 00" que realiza un PADDING de un zero a la izquierda del campo largo, así se convierte como LLLLVAR.