ISO 8583 adalah standard message untuk komunikasi antar institusi keuangan.

Saya akan memberi contoh bagaimana memparsing message yang datang sehingga dapat di ambil informasinya.

Misal perusahaan penyedia layanan pembayaran online PLN menerima message dari bank berupa :
080082200000800000000400000000000000000000590100000103123001

Pertanyaan nya, Artinya apa? Baca nya bagaimana yah?

Oke, kita coba parsing :

1. Aturan pertama adalah 4 digits awal berupa MTI(Message Type Indicator).

MTI berisi kode yang mengartikan bahwa “message yang datang berupa apa”?.
digit 1 = Menyatakan versi dari ISO8583. Pada umumnya di Indonesia masih menggunakan versi 0 tahun 1987.
digit 2 = Menyatakan jenis message nya.financial message(x2xx) atau reversal message(x4xx) atau network message(x8xx)
digit 3 = Menyatakan jenis message nya adalah message request(xx0x,xx2x) atau hasil reply(xx1x,xx3x). selain itu juga mengartikan bahwa apakah message ini sifatnya advice atau bukan.
digit 4 = Menyatakan bahwa jenis message tersebut adalah message yg dikirim ulang (xxx1) atau message original(xxx0)
dari contoh di atas, 4 digit awal adalah “0800″ yang artinya message ini adalah Network Message, request dan original(bukan repeat).

Karena message ini request, berarti PLN harus mereply dengan 4 digits awal messagenya “0810″. jika tidak di reply si bank akan menganggap bahwa jaringannya bermasalah(dari layer application).

0800
82200000800000000400000000000000 <= sisa

2. Aturan ke dua adalah ambil 16 atau 32 digits setelah nya yang berupa bilangan Hexa, convert menjadi bilangan biner (BitMap)

BitMap sesuai namanya adalah bit-bit untuk mapping.
jadi saya harus ambil 16 digits atau 32 digits ???

Jawabannya :

Ambil 1 digit pertama terlebih dahulu “8″ <== ini adalah bilangan hexa bukan decimal
convert menjadi bilangan binary “1000″, jika digit pertama dari bilangan binary tsbt adalah 1 artinya harus di ambil 32 digits, jika 0 artinya hanya 16 digits.

Berikut adalah 32 digits awal dari contoh “82200000800000000400000000000000″ lalu convert menjadi bilangan biner “10000010001000000000000000000000100000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000″

Seperti saya sebutkan diatas bahwa 16 digits ini adalah bitmap (1 = aktif, 0 = tidak aktif). Dari bitmap diatas artinya adalah hanya bit ke 1,7,11,33 dan 70 yang aktif. Arti dari tiap bit sudah di bakukan. berikut saya apply sebagian arti dari tiap bit berikut rumusnya :

1 BIT MAP, EXTENDED b 1
2 PRIMARY ACCOUNT NUMBER (PAN) LLVAR n ..19
3 PROCESSING CODE n 6
4 AMOUNT, TRANSACTION n 12
5 AMOUNT, SETTLEMENT n 12
6 AMOUNT, CARDHOLDER BILLING n 12
7 TRANSMISSION DATE AND TIME MMDDhhmmss n 10
8 AMOUNT, CARDHOLDER BILLING FEE n 8
9 CONVERSION RATE, SETTLEMENT n 8
10 CONVERSION RATE, CARDHOLDER BILLING n 8
11 SYSTEM TRACE AUDIT NUMBER (STAN) n 6

32 ACQUIRING INSTITUTION IDENTIFICATION CODE LLVAR n ..11
33 FORWARDING INSTITUTION IDENTIFICATION CODE LLVAR n ..11

70 NETWORK MANAGEMENT INFORMATION CODE n 3

0800
82200000800000000400000000000000
000000590100000103123001 <= Sisa

3. Ambil value nya bit yang aktif dengan rumus yang sudah baku.

bit[001] = BIT MAP, EXTENDED. menentukan apakah ada bitmap tambahan(16 atau 32 digits yang diambil). sudah di lakukan diatas.
bit[007] = panjangnya fix 10 digits (n 10) bernilai numeric. value = “0000005901″.
sisa = 00000103123001
bit[011] = panjangnya fix 6 digits (n 6) bernilai numeric(n). value = “000001″.
sisa = 03123001
bit[033] = LLVAR, artinya ambil 2 digits(LL) yang artinya jumlah digits value nya. digits = “03″.
sisa = 123001
n ..11, artinya nilainya berupa numeric, panjang max 11. value = “123″.
sisa = 001
bit[070] = panjangnya fix 3 digits (n 3) bernilai numeric(n). value = “001″.

Proses parsing sudah selesai. Hasil parsing dari “080082200000800000000400000000000000000000590100000103123001″ adalah :

MTI = 0800 (Network message Request)
bit[007] = “0000005901″
bit[011] = “000001″
bit[033] = “123″
bit[070] = “001″

Iklan