FinTech

Introduction to ISO 8583 Message Specification

My almost a decade long experience in Payment domain allowed me to understand financial transactions better. Here I will try my best to provide a simple introduction to ISO 8583 Financial Messaging Standard.

ISO 8583 is the standard which being followed by majority of financial transactions. It might appear complex at first glance, but once you learn it’s quite simple and fun to use.

There are few versions of the ISO 8583 standard: ISO 8583:1987, ISO8583:1993, ISO8583:2003. Though it defines a common standard, but some field are standard and some are generic. Means standard fields and their usage will remain same across the systems, but generic can be used in custom ways as per the specific system’s need.

Typically financial transaction messages being exchanged between two systems through a TCP/IP connection. Once the connection is established a Sign-On message is exchanged and then Financial Transaction messages. On regular interval an Echo message is also sent to ensure the other system is still alive.

These messages are being formatted as per the guidelines of ISO 8583 standards, which typically are made of three components

a) Message Type Identifier (MTI): Message Type Identifier is a 4 digit numeric that describe the type of message, which further explains the intents of message.

  • First Position describes the version of ISO 8583 used.
  • Second Position describes the message class such as authorization or reversal or network message and so on.
  • Third Position describes the message function such as request or response or advice and so on.
  • Fourth Position describes the origin point of message such as issuer or acquirer and so on.

Next is the list of MTI (ref: Wikipedia)

[table id=1 /]


b) Bitmap :
 Bitmap provide the information about which data element is present in the current message. It contains data in 16 hexadecimal characters, which can be broken into binary. All the positions with value ‘1’ signifies the presence of data element of #position number in the message.

An example will make it clear.

Primary Bitmap: 7024640100C08000

Convert it to Binary. Each 1 will represent a data element of corresponding position
0x70 0111 0000 (Data Element 2, 3, 4. Bit at position 1 value 0 indicate no secondary bitmap)
0x24 0010 0100 (Data Element 11, 14)
0x64 0110 0100 (Data Element 18, 19, 22)
0x01 0000 0001 (Data Element 32)
0x00 0000 0000
0xC0 1100 0000 (Data Element 41, 42)
0x80 1000 0000 (Data Element 49)
0x00 0000 0000

That’s how primary bitmap is being read, which can provide information of only 64 data elements. Some transaction messages requires data elements in the range of 65-128, means another bitmap is required, i.e secondary bitmap. The first bit of primary bitmap signifies the presence of secondary bitmap with value ‘1’

Primary Bitmap: F024640100C08000  &   Secondary Bitmap: 0000000000000004
0xF0 1111 0000 (Data Element 2, 3, 4. Also bit at position 1 value 1 indicates presence of secondary bitmap)
0x24 0010 0100 (Data Element 11, 14)
0x64 0110 0100 (Data Element 18, 19, 22)
0x01 0000 0001 (Data Element 32)
0x00 0000 0000
0xC0 1100 0000 (Data Element 41, 42)
0x80 1000 0000 (Data Element 49)
0x00 0000 0000
0x00 0000 0000
0x00 0000 0000
0x00 0000 0000
0x00 0000 0000
0x00 0000 0000
0x00 0000 0000
0x00 0000 0000
0x04 0000 0100 (Data Element 126)

c) Data Elements : Data elements are all the fields that contains the transaction information. Each element have their own format, attribute and length. Some are standard such as DE#49 Transaction Currency.

Next is the list of data elements (ref: Wikipedia)

[table id=2 /]

 

To conclude an ISO 8583 transaction message (based on the examples above) would look like as below:

0100F024640100C0800000000000000000041640000000000000010000000000001000001122112020599984005011123456789011234567812345678901234584002012345678901234567890
In Hex/Ascii : 
30313030F024640100C08000000000000000000431363430303030303030303030303030303130303030303030303030303031303030303031313232313132303230353939393834303035303131313233343536373839303131323334353637383132333435363738393031323334353834303032303132333435363738393031323334353637383930