کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

ISO 8583 ( تبادل پیام تراکنش مالی )


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(10010(2) 1000(8) 1010(A) 0001(1) 1000(8) 0000(0) 0001(1) 1111(F)
323A800128A1801F0000000014000000
بصورت ۱۶ کاراکتر هگزادسیمال : 
Primary : 323A800128A1801F
Secondary :0000000014000000

فیلد 49 ( Currency ) برای ایران : کد ۳۶۴

Iran

IRR

364

درجدول ستون 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 fieldTypeUsage
1b 64Bitmap
2n..19Primary account number (PAN)
3n 6Processing Code
4n 12Amount Transaction
5n 12Amount, settlement
6n 12Amount, cardholder billing
7n 10Transmission date & time
8n 8Amount, cardholder billing fee
9n 8Conversion rate, settlement
10n 8Conversion rate, cardholder billing
11n 6System trace audit number (STAN)
12n 6Local transaction time (hhmmss)
13n 4Local transaction date (MMDD)
14n 4Expiration date (YYMM)
15n 4Settlement date
16n 4Currency conversion date
17n 4Capture date
18n 4Merchant type, or merchant category code
19n 3Acquiring institution (country code)
20n 3PAN extended (country code)
21n 3Forwarding institution (country code)
22n 3Point of service entry mode
23n 3Application PAN sequence number
24n 3Function code (ISO 8583:1993), or network international identifier (NII)
25n 2Point of service condition code
26n 2Point of service capture code
27n 1Authorizing identification response length
28x+n 8Amount, transaction fee
29x+n 8Amount, settlement fee
30x+n 8Amount, transaction processing fee
31x+n 8Amount, settlement processing fee
32n ..11Acquiring institution identification code
33n ..11Forwarding institution identification code
34ns ..28Primary account number, extended
35z ..37Track 2 data
36n ...104Track 3 data
37an 12Retrieval reference number
38an 6Authorization identification response
39an 2Response code
40an 3Service restriction code
41ans 8Card acceptor terminal identification
42ans 15Card acceptor identification code
43ans 40Card acceptor name/location (1–23 street address, –36 city, –38 state, 39–40 country)
44an ..25Additional response data
45an ..76Track 1 data
46an ...999Additional data (ISO)
47an ...999Additional data (national)
48an ...999Additional data (private)
49a or n 3Currency code, transaction
50a or n 3Currency code, settlement
51a or n 3Currency code, cardholder billing
52b 64Personal identification number data
53n 16Security related control information
54an ...120Additional amounts
55ans ...999ICC data – EMV having multiple tags
56ans ...999Reserved (ISO)
57ans ...999Reserved (national)
58ans ...999
59ans ...999
60ans ...999Reserved (national) (e.g. settlement request: batch number, advice transactions: original transaction amount, batch upload: original MTI plus original RRN plus original STAN, etc.)
61ans ...999Reserved (private) (e.g. CVV2/service code   transactions)
62ans ...999Reserved (private) (e.g. transactions: invoice number, key exchange transactions: TPK key, etc.)
63ans ...999Reserved (private)
64b 64Message authentication code (MAC)
65b 1Extended bitmap indicator
66n 1Settlement code
67n 2Extended payment code
68n 3Receiving institution country code
69n 3Settlement institution country code
70n 3Network management information code
71n 4Message number
72n 4Last message's number
73n 6Action date (YYMMDD)
74n 10Number of credits
75n 10Credits, reversal number
76n 10Number of debits
77n 10Debits, reversal number
78n 10Transfer number
79n 10Transfer, reversal number
80n 10Number of inquiries
81n 10Number of authorizations (PUTA!)
82n 12Credits, processing fee amount
83n 12Credits, transaction fee amount
84n 12Debits, processing fee amount
85n 12Debits, transaction fee amount
86n 16Total amount of credits
87n 16Credits, reversal amount
88n 16Total amount of debits
89n 16Debits, reversal amount
90n 42Original data elements
91an 1File update code
92an 2File security code
93an 5Response indicator
94an 7Service indicator
95an 42Replacement amounts
96b 64Message security code
97x+n 16Net settlement amount
98ans 25Payee
99n ..11Settlement institution identification code
100n ..11Receiving institution identification code
101ans ..17File name
102ans ..28Account identification 1
103ans ..28Account identification 2
104ans ...100Transaction description
105ans ...999Reserved for ISO use
106ans ...999
107ans ...999
108ans ...999
109ans ...999
110ans ...999
111ans ...999
112ans ...999Reserved for national use
113ans ...999
114ans ...999
115ans ...999
116ans ...999
117ans ...999
118ans ...999
119ans ...999
120ans ...999Reserved for private use
121ans ...999
122ans ...999
123ans ...999
124ans ...999
125ans ...999
126ans ...999
127ans ...999
128b 64Message 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
bytehex valuebit valuefield #

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 request
Fld #DescriptionValueComments

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



هر عنصر داده در قالب استانداردی  توصیف می شود که محتوای  مجاز فیلد ( عددی ، باینری و ... ) و طول فیلد ( متغیر یا ثایت ) را تعریف می کند.

هر فیلد ممکن است دارای طول ثابت یا متغیر باشد.اگر متغیر باشد ، قبل از طول فیل  یک نشانگر طول قرار می گیرد.

TypeMeaning
Fixedno 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

1×18+3×20+13=91


بیتمپ اولیه : 

80 38 00 00 00 81 00 00 
فیلدهای 48 ، 41 ،  13 ، 12 ، 11 ، 1 موجود است و فیلد یک یعنی بیتمپ ثانویه نیز موجود است.

بیتمپ ثانویه : 

04 00 00 00 00 00 00 00 
  • فیلد 70 موجود است 

فیلد ۱۱ :   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 DefinitionMeaning
n 6Fixed length field of six digits
n.6LVAR numeric field of up to 6 digits in length
a..11LLVAR alpha field of up to 11 characters in length
b...999LLLVAR 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 خرداد ۱۴۰۲ شرکت در جشن ولیعهد اُردُن