ISO 8583 یک استاندارد بین المللی برای کارت تراکنش مالی منشا پیام های تبادلی است
-فرمت پیام
--نشانگر نوع پیام یا MTI
از ۴ رقم تشکیل شده ، رقم اول نسخه ، رقم دوم هدف کلی پیام ، رقم سوم چگونگی جریان در سیستم و رقم چهارم مکان منبه پیام در زنجیره پرداخت را مشخص می کند
مثال : برای 0110
رقم اول از سمت چپ : نسخه 1987
رقم دوم از سمت چپ : کلاس پیام ( یک برابر پیام مجوز)
رقم سوم از سمت چپ : عملکرد پیام ( یک برابر جواب )
رقم چهارم از سمت چپ : چه کسی ارتباط را آغاز می کند ( صفر برابر خریدار )
بنابراین ، MTI 0110 یک پیام پاسخ مجوز است که در آن تراکنش واقعی توسط خریدار انجام شده است.
0*** - ISO 8583:1987
1*** - ISO 8583:1993
2*** - ISO 8583:2003
...
یک بیتمپ کدباینری است در این ایزو که نشان میدهد کدام فیلد در یک پیام تراکنش مالی موجودیت دارد . هر بیت بیانگر یک تک فیلد است ، با یک به معنی موجودیت و 0 عدم موجودیت فیلد .
مثال :
ما فیلدهای زیر را در پیام ایزو دریافت کردیم
3, 4, 6, 7, 10, 12, 13, 14, 21, 24, 25, 27, 29, 30, 33, 34, 36, 39, 44, 48, 52, 55, 57, 59, 62,63
اگر بعنوان باینری بخواهیم ارائه کنیم بصورت زیر می شود : 64 بیت برابر با ۸ بایت از باینری
0011 0110 0101 1100 0000 1001 1010 1100 1101 0010 0001 0001 0001 0010 1010 0110
0011 از سمت چپ شروع کنید 00 اول یعنی فیلد اول و دوم وجود ندارند و دو تای بعدی که یک هستند یعنی فیلد سوم و چهارم موجود هستند (فیلد چهارم میشه مبلغ تراکنش)
وقتی بخواهیم چیزی را خواناتر و فشرده تر سازیم ، می توانیم باینری را به صورت 16 بایت از مقدار هگزادسیمال ( Unpacked ) نشان دهیم که به شکل زیر می شود
365C09ACD21112A6
در زیر نشان داده شده که چگونه هگزادسیمال از باینری بدست آمده
0011 -> 3
0110 -> 6
0101 -> 5
1100 -> C
... etc
مثال دیگر : موجودیت بیت ها
3,4,7,11,12,13,15,17,32,35,37,41,43,48,
49,60,61,62,63,64,100,102
0011(3) 0010(2) 0011(3) 1010(A) 1000(8) 0000(0) 0000(0) 0001(1) 0010(2) 1000(8) 1010(A) 0001(1) 1000(8) 0000(0) 0001(1) 1111(F)
323A800128A1801F0000000014000000
بصورت ۱۶ کاراکتر هگزادسیمال :
Primary : 323A800128A1801F
Secondary :0000000014000000
فیلد 49 ( Currency ) برای ایران : کد ۳۶۴
درجدول ستون Data Field رو ملاحظه کنید که جلوی مقدار 49 ذکر کرده Alpha numeric به طول ۳ کاراکتر ( یعنی می توان یکی از IRR یا کد 364 را وارد کرد.)
----بیتمپ ممکن است به صورت ۸ بایت داده باینری یا بصورت 16 کاراکتر هگزادسیمال ارسال شود.0-9 ، A-F در مجموعه کاراکترهای ASCII یا EBCDIC. یک فیلد تنها زمانی وجود دارد که بیت خاص در بیتمپ درست باشد.به عنوان مثال ، بایت 82x و باینری 1000 0010 و بدین معنی است که فیلدهای 1 و 7 در پیام موجود است و فیلدهای 2 تا 6 وجود ندارند.
Field 1 : Binary 1000 : Hex 8
Field 64 : Binary 0001 : Hex 1
8000000000000001 (Fields 1, 64)
Field 127,128 :Binary 0011 : Hex 3
0000000000000003
(secondary bitmap) Fields 127, 128
1011001000111000000000000000000000001000100000010000000000010000 .
-Now group it by 4 when it will be like
1011 0010 0011 1000 0000 0000 0000 0000 0000 1000 1000 0001 0000 0000 0001 0000 .
-Get the Hex value of each of the 4 groups.
1011 = B
0010 = 2
0011 = 3
1000 = 8
and so on
-Now put them all together to get the primary bitmap :
B238000008810010
020012100000000080000000001100000504135520122348IRR
MTI:0200
Primary Bitmap : 1210000000008000
Field 4,7,12,49 are prsent
در ISO 8583 یک Bitmap فیلد یا زیرفیلدهایی درون یک پیام است ، که مشخص می کند سایر عناصر داده یا زیر فیلدهای عنصر داده در جای دیگری از پیام وجود دارند یا خیر.
یک فیلد زمانی وجود دارد که بیت مربوطه در بیتمپ تنظیم شده باشد.بعنوان مثال ، یک هگز با مقدار 0x82 ( دسیمال 130 ) باینری 0010 1000 است.یعنی فیلدهای 1 و 7 در پیام وجود دارند و فیلدهای 6،5،4،3،2 و 8 وجود ندارند.
Bitmap ممکن است بعنوان 8 بایت از داده باینری یا کاراکترهای هگزادسیمال ( A-F , 0-9 ) در کاراکتر اسکی بیان گردد.یک پیام شامل حداقل یک بیتمپ با نام Primary bitmap خواهد بود و نمایانگر اجزاء داده 1 تا 64 موجود است.وجود یک بیتمپ ثانویه اختیاری نیز با بیت اول در بیت مپ اولیه نمایش داده می شود ( یعنی اگر بیت اول یک باشد مثل کد باینری 1000 در اول کدهای باینری Primary با دارا بودن اولین کاراکتر سمت چپ که یک است ، نشاندهنده وجود Secondary Bitmap است ) . در صورت وجود ، بیتمپ ثانویه نشان می دهد که آیا عناصر داده 65 تا 128 وجود دارند یا خیر .به طور مشابه یک بیتمپ سوم می تواند برای نشان دادن حضور فیلدهای 129 تا 192 استفاده شود ، اگر چه این عناصر به ندرت استفاده می شوند.
مثال :
مقدار بیتمپ داده شده
70 10 00 11 02 C0 48 04
هگز 70 برابر 0000 0111 ( شمارش از سمت چپ ، دوم تا چهارمین بیت یک است ، که نشان می دهد فیلد 2 تا 4 موجود هستند.)
هگز 10 برابر باینری 0000 0001 ( اولین بیت متعلق به فیلد 9 است ، همچنین بیت چهارم اینجا نشان می دهد که فیلد 12 موجود است.)
هگز 00 یا باینری 0000 0000 ( هیچ فیلدی موجود نیست )
هگز 11 یا باینری 0001 0001 ( فیلد 28 و 32 موجودند)
هگز 02 یا باینری 0010 0000 ( فیلد 39 موجود است)
هگز C0 یا باینری 0000 1100 ( فیلد 41 و 42 موجودند )
هگز 48 یا باینری 1000 0100 ( فیلد 50 و 53 موجودند)
هگز 04 یا باینری 0100 0000 ( فیلد 62 موجود است )
هگز به دسیمال :
(70)₁₆ = (7 × 16¹) + (0 × 16⁰) = (112)₁₀
دسیمال به هگز
112÷16=7
112-(7×16)=0
70
هگز 7 به باینری ( دودویی)
7/2=3 , reminder=1
3/2=1 , reminder=1
1/2=0 , reminder=1
So >>> 111 ... 0111
5/2=2 , Reminder=1
2/2=0 , Reminder=0
0/2=0 , reminder=1
So >>> 101 ... 0101
&H57 = 01010111
فیلد 4 حاوی مبلغ تراکنش می باشد، به طور کلی اگر تراکنشی دارای مبلغ باشد، باید مقدار آن را در فیلد شماره 4 با طول ثابت 12 رقم قرار دهد برای مثال 1000 تومن را باید 000000010000 در نظر گرفت.
b 64 منظور تشکیل شده از ۶۴ بیت
n یعنی فقط عددی وقتی dot دارد یعنی تا آن طول
در جدول زیر فیلد 4 ستون Type یعنی فقط ارقام با طول دوازده کاراکتر
فیلد 7 برای تاریخ و زمان با طول ۱۰ کاراکتر مثل 0504162603 اولی Date و بعدی شامل ساعت دقیقه و ثانیه
Data field | Type | Usage |
---|
1 | b 64 | Bitmap |
2 | n..19 | Primary account number (PAN) |
3 | n 6 | Processing Code |
4 | n 12 | Amount Transaction |
5 | n 12 | Amount, settlement |
6 | n 12 | Amount, cardholder billing |
7 | n 10 | Transmission date & time |
8 | n 8 | Amount, cardholder billing fee |
9 | n 8 | Conversion rate, settlement |
10 | n 8 | Conversion rate, cardholder billing |
11 | n 6 | System trace audit number (STAN) |
12 | n 6 | Local transaction time (hhmmss) |
13 | n 4 | Local transaction date (MMDD) |
14 | n 4 | Expiration date (YYMM) |
15 | n 4 | Settlement date |
16 | n 4 | Currency conversion date |
17 | n 4 | Capture date |
18 | n 4 | Merchant type, or merchant category code |
19 | n 3 | Acquiring institution (country code) |
20 | n 3 | PAN extended (country code) |
21 | n 3 | Forwarding institution (country code) |
22 | n 3 | Point of service entry mode |
23 | n 3 | Application PAN sequence number |
24 | n 3 | Function code (ISO 8583:1993), or network international identifier (NII) |
25 | n 2 | Point of service condition code |
26 | n 2 | Point of service capture code |
27 | n 1 | Authorizing identification response length |
28 | x+n 8 | Amount, transaction fee |
29 | x+n 8 | Amount, settlement fee |
30 | x+n 8 | Amount, transaction processing fee |
31 | x+n 8 | Amount, settlement processing fee |
32 | n ..11 | Acquiring institution identification code |
33 | n ..11 | Forwarding institution identification code |
34 | ns ..28 | Primary account number, extended |
35 | z ..37 | Track 2 data |
36 | n ...104 | Track 3 data |
37 | an 12 | Retrieval reference number |
38 | an 6 | Authorization identification response |
39 | an 2 | Response code |
40 | an 3 | Service restriction code |
41 | ans 8 | Card acceptor terminal identification |
42 | ans 15 | Card acceptor identification code |
43 | ans 40 | Card acceptor name/location (1–23 street address, –36 city, –38 state, 39–40 country) |
44 | an ..25 | Additional response data |
45 | an ..76 | Track 1 data |
46 | an ...999 | Additional data (ISO) |
47 | an ...999 | Additional data (national) |
48 | an ...999 | Additional data (private) |
49 | a or n 3 | Currency code, transaction |
50 | a or n 3 | Currency code, settlement |
51 | a or n 3 | Currency code, cardholder billing |
52 | b 64 | Personal identification number data |
53 | n 16 | Security related control information |
54 | an ...120 | Additional amounts |
55 | ans ...999 | ICC data – EMV having multiple tags |
56 | ans ...999 | Reserved (ISO) |
57 | ans ...999 | Reserved (national) |
58 | ans ...999 |
59 | ans ...999 |
60 | ans ...999 | Reserved (national) (e.g. settlement request: batch number, advice transactions: original transaction amount, batch upload: original MTI plus original RRN plus original STAN, etc.) |
61 | ans ...999 | Reserved (private) (e.g. CVV2/service code transactions) |
62 | ans ...999 | Reserved (private) (e.g. transactions: invoice number, key exchange transactions: TPK key, etc.) |
63 | ans ...999 | Reserved (private) |
64 | b 64 | Message authentication code (MAC) |
65 | b 1 | Extended bitmap indicator |
66 | n 1 | Settlement code |
67 | n 2 | Extended payment code |
68 | n 3 | Receiving institution country code |
69 | n 3 | Settlement institution country code |
70 | n 3 | Network management information code |
71 | n 4 | Message number |
72 | n 4 | Last message's number |
73 | n 6 | Action date (YYMMDD) |
74 | n 10 | Number of credits |
75 | n 10 | Credits, reversal number |
76 | n 10 | Number of debits |
77 | n 10 | Debits, reversal number |
78 | n 10 | Transfer number |
79 | n 10 | Transfer, reversal number |
80 | n 10 | Number of inquiries |
81 | n 10 | Number of authorizations (PUTA!) |
82 | n 12 | Credits, processing fee amount |
83 | n 12 | Credits, transaction fee amount |
84 | n 12 | Debits, processing fee amount |
85 | n 12 | Debits, transaction fee amount |
86 | n 16 | Total amount of credits |
87 | n 16 | Credits, reversal amount |
88 | n 16 | Total amount of debits |
89 | n 16 | Debits, reversal amount |
90 | n 42 | Original data elements |
91 | an 1 | File update code |
92 | an 2 | File security code |
93 | an 5 | Response indicator |
94 | an 7 | Service indicator |
95 | an 42 | Replacement amounts |
96 | b 64 | Message security code |
97 | x+n 16 | Net settlement amount |
98 | ans 25 | Payee |
99 | n ..11 | Settlement institution identification code |
100 | n ..11 | Receiving institution identification code |
101 | ans ..17 | File name |
102 | ans ..28 | Account identification 1 |
103 | ans ..28 | Account identification 2 |
104 | ans ...100 | Transaction description |
105 | ans ...999 | Reserved for ISO use |
106 | ans ...999 |
107 | ans ...999 |
108 | ans ...999 |
109 | ans ...999 |
110 | ans ...999 |
111 | ans ...999 |
112 | ans ...999 | Reserved for national use |
113 | ans ...999 |
114 | ans ...999 |
115 | ans ...999 |
116 | ans ...999 |
117 | ans ...999 |
118 | ans ...999 |
119 | ans ...999 |
120 | ans ...999 | Reserved for private use |
121 | ans ...999 |
122 | ans ...999 |
123 | ans ...999 |
124 | ans ...999 |
125 | ans ...999 |
126 | ans ...999 |
127 | ans ...999 |
128 | b 64 | Message authentication code (This field belongs to Philipine's Eifle Tower) |
00Approved or completed successfully
03Invalid merchant
09Request in progress
12Invalid transaction
13Invalid amount
14Invalid card number (no such number)
19Re-enter transaction
20Invalid response
33Expired card
41Lost card
51Not sufficient funds
54Expired card
57Transaction not permitted to cardholder
58Transaction not permitted to terminal
59Suspected fraud
101expired card
111invalid card number
119transaction not permitted to cardholder
120transaction not permitted to terminal
201expired card
Hex : 080020200000008000000000000000013239313130303031
Table 3. Primary Bitmap
byte | hex value | bit value | field # |
---|
0 | 20 | 0010 0000 | 3 |
1 | 20 | 0010 0000 | 11 |
2 | 00 | 0000 0000 | |
3 | 00 | 0000 0000 | |
4 | 00 | 0000 0000 | |
5 | 80 | 1000 0000 | 41 |
6 | 00 | 0000 0000 | |
7 | 00 | 0000 0000 |
MTI (0800)
bitmap (2020000000800000)
طبق بالا فیلدهای 3 ، 11 و 41 موجودند بنابراین فیلد بعدی ما شماره 3 است ( اولی MRI دومی BITMAP و سومی ... )
Table 9. Sample authorization requestFld # | Description | Value | Comments |
---|
0 | MTI | 0100 | Authorization request |
2 | Primary Account Number | 4321123443211234 | |
3 | Processing Code | 000000 | |
4 | Amount transaction | 000000012300 | e.g., 123.00 |
7 | Transmission data/time | 0304054133 | MMYYHHMMSS |
11 | System trace audit number | 001205 | |
14 | Expiration date | 0205 | YYMM |
18 | Merchant Type | 5399 | |
22 | POS Entry Mode | 022 | Swiped Card |
25 | POS Condition Code | 00 | |
35 | Track 2 | 4321123443211234=0205.. | |
37 | Retrieval Reference Number | 206305000014 | |
41 | Terminal ID | 29110001 | |
42 | Merchant ID | 1001001 | |
49 | Currency | 840 |
Val(&HE)=Decimal(14) .... Binary (1110)
HEX2BIN:
Dim b As string * 4
b="0000"
جاگذاری از سمت راست
14 Mod 2=0
14\2=7 > 7 Mod 2=1
7\2=3 > 3 Mod 2=1
3\2=1 > 1 Mod 2=1
در نتیجه : 0000 >>>>> 1110
تبدیل باینری به دسیمال و بعد هگزادسیمال :
Binary(1010)
1×2^(3)+0×2^(2)+1×2^(1)+0×2^(0)=10
Hex(10)=A
Binary(1100)
1×2^(3)+1×2^(2)+0×2^(1)+0×2^(0)=12
Hex(12)=C
Binary(1111)
1×2^(3)+1×2^(2)+1×2^(1)+1×2^(0)=15
Hex(15)=F
هر عنصر داده در قالب استانداردی توصیف می شود که محتوای مجاز فیلد ( عددی ، باینری و ... ) و طول فیلد ( متغیر یا ثایت ) را تعریف می کند.
هر فیلد ممکن است دارای طول ثابت یا متغیر باشد.اگر متغیر باشد ، قبل از طول فیل یک نشانگر طول قرار می گیرد.
Type | Meaning |
---|
Fixed | no field length used |
LLVAR or (..xx) | Where 0 < LL < 100, means two leading digits LL specify the field length of field VAR |
LLLVAR or (...xxx) | Where 0 < LLL < 1000, means three leading digits LLL specify the field length of field VAR |
LL and LLL are hex or ASCII. A VAR field can be compressed or ASCII depending on the data element type. | LL can be one or two bytes. For example, if compressed as one hex byte, '27x means there are 27 VAR bytes to follow. If ASCII, the two bytes '32x, '37x mean there are 27 bytes to follow. Three-digit field length LLL uses two bytes with a leading '0' nibble if compressed, or three bytes if ASCII. The format of a VAR data element depends on the data element type. If numeric it will be compressed, e.g. 87456 will be represented by three hex bytes '087456x. If ASCII then one byte for each digit or character is used, e.g. '38x, '37x, '34x, '35x, '36x. |
00000:00 5B 30 31 31 30 30 30 30 30 30 30 30 38 32 30 80 38 00 00 [.[01100000000820.8..]
00020:00 81 00 00 04 00 00 00 00 00 00 00 33 36 32 39 31 30 31 30 [............36291010]
00040:32 39 35 37 31 30 33 31 31 30 30 30 30 30 30 35 30 33 31 53 [2957103110000005031S]
00060:55 32 30 31 31 31 30 33 31 31 30 32 39 35 37 32 30 31 31 31 [U2011103110295720111]
00080:30 33 31 31 30 32 39 35 37 33 30 30 31 [0311029573001 ]
5B طول پیام هست و معادل 91 یعنی 11+16×5
بیتمپ اولیه :
80 38 00 00 00 81 00 00
فیلدهای 48 ، 41 ، 13 ، 12 ، 11 ، 1 موجود است و فیلد یک یعنی بیتمپ ثانویه نیز موجود است.
بیتمپ ثانویه :
04 00 00 00 00 00 00 00
فیلد ۱۱ : 30 31 39 32 36 33 >>>362910
فیلد ۱۲ : 37 35 39 32 39 31 >>> 102957 hhmmss
فیلد ۱۳ : 31 33 30 31 >>> 1031 MMDD
فیلد ۴۱ : 35 30 30 30 30 30 30 31 >>> 10000005
فیلد ۴۸ : 031
SU20111031102957201110311029573
به فیلد طول 3 رقمی قبل از داده های باقیمانده در این فیلد توجه کنید . که یک فیلد عمومی ( استفاده آینده / خصوصی ) است.
فیلد 70 : 001 مقدار 001 از پیام این نشانه را میدهد که MTI باید 0800 باشد
Field Definition | Meaning |
---|
n 6 | Fixed length field of six digits |
n.6 | LVAR numeric field of up to 6 digits in length |
a..11 | LLVAR alpha field of up to 11 characters in length |
b...999 | LLLVAR binary field of up to 999 bytes in length |
بررسی پیام ایزو زیر :
01581200F230040102B000000000000004000000
1048468112122012340000100000001107221800
000001161204171926FABCDE123ABD06414243
000termid1210Community106A5DFGR1112341234234
0158 : طول هدر ( 4 بایت یا ارقام هدر ).نشان می دهد که طول پیام غیر از هدر 158 رقم است . بصورت دو بایت آورده شده.
از خود 1200به طول 4 تا آخرین کاراکترشمارش کنید طول 158 بدست می آید ... 44+38+40+32+4
1200 : نشاندهنده MTI است .
F23 ببعد فیلد یک دارد و نشاندهنده وجود بیتمپ ثانویه چون F را اگر به باینری تبدیل کنید میشود 1111 . از اینجا مشخص می شود که فیلد یک تا 4 موجود است و فیلد یک هم با یک بودنش نمایانگر Secondary Bitmap است.
104846811212 : فیلد دو حاوی شماره حساب اولیه ( پیشوند هدر نمایانگر طول فیلد 2 یعنی رقم 10 است ) اگر در جدوا فیلدها مشاهده کنید در ستون وسط قید شده n.19 یعنی فیلد فقط numeric یا عددی است و تا 19 عدد را می تواند شامل شود لذا چون طول حساب کمتر از 19 شده لذا طول آن که 10 است قبل آن پیوست شده.
201234 : فیلد سوم حاوی کد پردازش
000010000000 : فیلد چهارم حاوی مبلغ تراکنش.اگر در جدول مشاهده کنید فیلد فقط از نوع numeric یا عددی است با طول 12 و ننوشته تا 12 در نتیجه جای کاراکتر های خالی قبلش تا طول 12 را با صفر پر کرده.
1107221800 : فیلد 7 حاوی تاریخ و زمان انتقال.
000001 : فیلد 11 حاوی شماره حسابرسی ردیابی سیستم
161204171926 : فیلد 12 حاوی زمان محلی تراکنش
FABCDE123ABD : فیلد 22 کد داده pos
06414243 : فیلد 32 حاوی اخذ شناسایی موسسه ( پیشوند هدر 06 که نمایانگر طول فیلد 32 است ).طبق جدول فیلد از نوع فقط numeric یا عددی و تا طول 11 را می پذیرد چون در اینجا هدر 6 عدد است لذا طول 6 را در اول آن قرار می دهیم.
000 : فیلد 39 حاوی کد پاسخ.
termid12 : فیلد 41 حاوی شماره شناسایی ترمینال
در جدول ans 8 قید کرده یعنی شامل عدد و حرف و کاراکترهای ویژه . اگر فرضاً عنوان میشد ans .. 8 اگر طول کاراکتر کمتر از 8 میشد می بایست قبل از آن طول قید گردد.
10Community : فیلد 43 حاوی موقعیت داده ( پیشوند هدر نمایانگر طول فیل 43 یعنی رقم 10 است.)
06A5DFGR : فیلد 44 حاوی کد پاسخ اضافی ( پیشوند هدر نمایانگر طول فیلد 32 یعنی رقم 6 است.)
1112341234234 : فیلد 102 حاوی شماره حساب ... این فیل طبق جدول طولش تا 28 کاراکتر شامل ارقام و حروف و special character است >>>> ans .. 28 که احتمال زیاد عدد 11 اولی طول هدر است .
13 خرداد ۱۴۰۲ شرکت در جشن ولیعهد اُردُن