ISO 8583
ISO 8583 — стандарт ISO, описывающий процесс передачи и формат финансовых сообщений системами, обрабатывающими данные банковских платёжных карт.
Введение[править | править код]
Транзакция с использованием платёжных карт (например, для запроса авторизации держателя карты) начинается с устройства, её инициирующего, например c POS-терминала, проходит через ряд систем/сетей и заканчивается на системе, которая выпустила карту (эмитент).
Транзакционные данные включают в себя:
- информацию о карте (например, номер счета, англ. Account number)
- информацию о терминале (например, номер торговца, англ. Merchant)
- собственно финансовая информация (например, цена, количество)
Система, которая выпустила карту, авторизует транзакцию либо отклоняет её и генерирует ответное сообщение, которое возвращается на терминал.
ISO 8583 описывает формат транзакций и механизм их передачи («communication flow») таким образом, чтобы различные системы могли обмениваться этими транзакциями. Большинство транзакций, которые выполняются с банкоматов, используют ISO 8583 в некоторых аспектах коммуникационной цепочки, как то, например, транзакции, выполняющиеся при оплате покупателем товара в магазине. Такие международные платёжные системы как MasterCard и Visa используют стандарт ISO 8583 при авторизационных взаимодействиях.
ISO 8583 описывает транзакции, инициированные держателем карты, такие как покупка, снятие наличных, пополнение счёта, оплату, аннулирование операции, запрос баланса, платежи и переводы со счёта на счёт. ISO 8583 также описывает сообщения между системами для обмена ключами безопасности, согласования итогов и сообщения для других административных целей.
Несмотря на то, что ISO 8583 определяет общий стандарт, как правило, он не используется напрямую в системах или сетях. Вместо этого каждая сеть адаптирует стандарт для собственных нужд, пользуясь отдельными полями и вариантами использования.
Положение полей различается в разных версиях стандарта. К примеру, отдельные элементы, определяющие валюту в версиях 1987 и 1993 более не используются в версии 2003, где валюта является составной частью элемента, определяющего сумму. ISO 8583:2003 нужно время для достижения широкого признания.
Сообщение ISO 8583 состоит из следующих частей:
- Message Type Indicator (MTI) — Индикатор типа сообщения;
- Одна или несколько битовых карт, указывающих, какие элементы данных присутствуют в сообщении;
- Элементы данных, поля сообщения.
Индикатор типа сообщения[править | править код]
Индикатор типа сообщения (англ. Message Type Indicator (MTI)) — 4-значное числовое поле, которое определяет высокоуровневую функцию сообщения. Индикатор типа сообщения включает в себя версию стандарта ISO 8583, класс сообщения, функцию сообщения и источник сообщения, описанные ниже.
Пример: 0110
0xxx -> версия стандарта ISO 8583 (версия 1987 года) x1xx -> класс сообщения (сообщение авторизации) xx1x -> функция сообщения (ответ на запрос) xxx0 -> кто начал взаимодействие (эквайер)
Версии ISO 8583[править | править код]
Первая позиция MTI определяет версию стандарта ISO 8583, используемую для передачи сообщения.
Позиция | Значение |
---|---|
0xxx | Версия ISO 8583-1:1987 |
1xxx | Версия ISO 8583-2:1993 |
2xxx | Версия ISO 8583-1:2003 |
3xxx | Зарезервировано ISO |
4xxx | Зарезервировано ISO |
5xxx | Зарезервировано ISO |
6xxx | Зарезервировано ISO |
7xxx | Зарезервировано ISO |
8xxx | Зарезервировано для национального использования |
9xxx | Зарезервировано для частного использования |
Класс сообщения[править | править код]
Вторая позиция MTI определяет общую цель сообщения.
Позиция | Значение | Использование |
---|---|---|
x1xx | Authorization Message | Проверяет доступность средств, получает одобрение, но проведение по счёту не производится. Работает по принципу Dual Message System (DMS), ожидает обмена файлами для проведения по счёту. |
x2xx | Financial Message | Проверяет доступность средств, получает одобрение, производится проводка по счёту. Работает по принципу Single Message System (SMS), обмен файлами по данной транзакции не производится. |
x3xx | File Actions Message | Used for hot-card, TMS and other exchanges |
x4xx | Reversal/Chargeback Message | Reversal (x4x0 or x4x1): Отменяет действие предыдущей авторизации.
Chargeback (x4x2 or x4x3): Отменяет списание по финансовому сообщению. |
x5xx | Reconciliation Message | Передаёт информацию о проведении расчёта (например, сообщение о закрытии смены на POS-терминале) |
x6xx | Administrative Message | Передает административные сообщения. Часто используется для передачи сообщений об ошибках (например сообщение отклонено) |
x7xx | Fee Collection Message | |
x8xx | Network Management Message | Используется для обмена ключами безопасности, входа в систему, посылки эхо-тестов и для других функций сети |
x9xx | Зарезервировано ISO |
Функция сообщения[править | править код]
Третья позиция Индикатора сообщения (MTI) определяет функцию сообщения и способ его обработки в системе. Запросы (Request) являются сообщениями полного цикла (т.е. от эквайера к эмитенту и обратно включая время ожидания и автоматической переадресации), в то время как авизо (Advice) - прямые сообщения (например, от терминала к эквайеру, от эквайера в сеть, из сети к эмитенту, с гарантированной передачей к следующему звену, но, возможно, с задержкой).
Позиция | Значение |
---|---|
xx0x | Request |
xx1x | Request Response |
xx2x | Advice |
xx3x | Advice Response |
xx4x | Notification |
xx8x | Response acknowledgment |
xx9x | Negative acknowledgment |
Источник сообщения[править | править код]
Четвертое значение индикатора сообщения (MTI) определяет его инициатора в платежной системе.
Позиция | Значение |
---|---|
xxx0 | Acquirer |
xxx1 | Acquirer Repeat |
xxx2 | Issuer |
xxx3 | Issuer Repeat |
xxx4 | Other |
xxx5 | Other Repeat |
Примеры[править | править код]
С помощью всех вышеуказанных позиций индекса сообщения (MTI), полностью определяется как будет обрабатываться сообщение в сети. К сожалению, не все реализации стандарта ISO 8583 интерпретируют значение индекса (MTI) одинаково, но несмотря на это, некоторые MTI - стандартны:
MTI | Значение | Применение |
---|---|---|
0100 | Authorization request | Авторизационный запрос с POS-терминала |
0120 | Authorization Advice | При падении эмитента (например, по timeout) и необходимости успешного проведения транзакции |
0121 | Authorisation Advice Repeat | При истечении срока ожидания авизо |
0200 | Acquirer Financial Request | Финансовый запрос, часто от банкомата |
0220 | Acquirer Financial Advice | Например, при проверке в отеле |
0221 | Acquirer Financial Advice repeat | При ожидании авизо |
0400 | Acquirer Reversal Request | Отмена авторизации |
0420 | Acquirer Reversal Advice | Advises that a reversal has taken place |
0421 | Acquirer Reversal Advice Repeat Message | if the reversal times out |
0800 | Network Management Request | Echo test, logon, log off etc |
0820 | Network Management Advice | Keychange |
Битовые карты[править | править код]
В соответствии с ISO 8583, побитовая карта — это поле или подполе внутри сообщения, показывающие какие элементы данных представлены в другом месте сообщения.
Сообщение содержит как минимум одну битовую карту, которая называется Primary Bitmap (англ. Первичная битовая карта), определяющую, какие из элементов данных с номерами от 1 до 64 присутствуют в сообщении. Как правило, если вторая битовая карта присутствует, то размещается в качестве первого элемента данных и определяет, какие из элементов данных с номерами от 65 до 128 присутствуют в сообщении. Аналогично, третья битовая карта может использоваться для определения наличия или присутствия элементов со 129 до 192, впрочем, они используются редко.
Битовые карты могут быть переданы как 8 байт двоичной информации или как 16 шестнадцатеричных символов (0-9, A-F) из наборов ASCII или EBCDIC.
Поле присутствует, когда соответствующий бит битовой карты имеет значение «истина», например, байт '10000010' означает, что поля 1 и 7 присутствуют в сообщении.
Примеры[править | править код]
Bitmap | Определяет наличие... |
---|---|
4210001102C04804 | ...полей 2, 7, 12, 28, 32, 39, 41, 42, 50, 53, 62 |
7234054128C28805 | ...полей 2, 1, 4, 7, 11, 12, 14, 22, 24, 26, 32, 35, 37, 41, 42, 47, 49, 53, 62, 64, 100 (требуется второй Bitmap, чтобы показать наличие поля номер 100) |
8000000000000001 | ...полей 1, 64 |
0000000000000003 (второй Bitmap) |
Поля 127, 128 |
Объяснение Bitmap поля 4210001102C04804
01000010 = 42x (нумеруем слева направо, второй и седьмой бит равны 1, что означает присутствие полей 2 и 7)
00010000 = 10x (присутствует поле 12)
00000000 = 00x (никакие поля не присутствуют)
00010001 = 11x (присутствуют поля 28 и 32)
00000010 = 02x (присутствует поле 39)
11000000 = C0x (присутствуют поля 41 и 42)
01001000 = 48x (присутствуют поля 50 и 53)
00000100 = 04x (присутствует поле 62)
Номер
бита |
0 | 10 | 20 | 30 | 40 | 50 | 60 |
---|---|---|---|---|---|---|---|
1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234 | |
Bitmap | 0010001000 | 0100000000 | 0000000100 | 0100000010 | 1100000001 | 0010000000 | 0100 |
Поля, присутствующие в сообщении с переменной длиной:
2, 7, 12, 28, 32, 39, 41, 42, 50, 53, 62
Элементы данных[править | править код]
Элементы данных — это отдельные поля, содержащие информацию о транзакции. Исходный стандарт ISO 8583:1987 был рассчитан на возможность включения 128 элементов данных, а в последующих версиях было определено до 192 элементов данных. В ревизии 1993 года были введены новые описания, удалены некоторые старые, при этом формат как таковой не претерпел изменений.
Несмотря на то, что каждый элемент данных имеет описанное значение и формат, стандарт включает некоторые элементы данных для общих целей, а также специфические для системы (или страны) элементы данных, которые могут иметь огромные различия в разных реализациях.
Каждый элемент данных описан в формате стандарта, который указывает разрешенные значения полей (напр. числовое, бинарное итд.) и длину поля (постоянное значение или меняющее), в соответствии с данной таблицей:
Сокращение | Значение |
---|---|
a | (Латинские?) буквы, включая пробелы |
n | Только числовые значения |
s | Только специальные символы |
an | Буквы и цифры |
as | Буквы и специальные символы |
ns | Числа и специальные символы |
ans | Буквы, числа и специальные символы |
b | Двоичные данные |
z | Набор кодов трека 2 и 3, как определено в ISO 4909 и ISO 7813 |
. или .. или … | индикатор переменной длины поля, каждый символ . означает цифру |
x или xx или xxx | поле фиксированной длины или максимальная длина в случае полей переменной длины |
Кроме того, каждое поле может быть или фиксированной, или переменной длины. Если поле переменной длины, длина поля предшествуется индикатором длины.
Тип | Значение |
---|---|
Fixed | длина поля не используется |
LLVAR или (..xx) | Где LL < 100, означает две лидирующих цифры LL, определяющие длину поля VAR |
LLLVAR или (…xxx) | Где LLL < 1000, означает три лидирующие цифры LLL, определяющие длину поля VAR |
LL и LLL - шестнадцатеричные цифры или ASCII-символы. Поле VAR может быть упаковано (compressed) или быть записано в ASCII, в зависимости от типа данных элемента | LL может быть длиной 1 или 2 байта. Например, если оно упаковано как один шестнадцатеричный байт, 0x27 означает, что далее следует 27 байт поля VAR. Если формат ASCII, два байта 0x32, 0x37 означают, что далее следует 27 байт (так как 0x32 - это код символа '2' в кодировке ASCII и т.п.). 3-цифирная длина поля LLL использует 2 байта с лидирующим 0 в упакованном режиме, или 3 байта в формате ASCII. Формат элемента данных VAR зависит от типа элемента данных. Если число было упаковано, то 874 будет представлено 2 байтами 0x0874. В формате ASCII будет использоваться один байт для каждой цифры или символа, оно будет выглядеть, как 0x38 ('8'), 0x37 ('7'), 0x34 ('4'). |
Элемент данных (номер поля) | Тип | Использование |
---|---|---|
1 | b 8 | Дополнительная битовая карта |
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 | Systems trace audit number |
12 | n 6 | Time, Local transaction |
13 | n 4 | Date, Local transaction |
14 | n 4 | Date, Expiration |
15 | n 4 | Date, Settlement |
16 | n 4 | Date, conversion |
17 | n 4 | Date, capture |
18 | n 4 | Merchant type |
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 number |
24 | n 3 | Function code(ISO 8583:1993)/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 | n 8 | Amount, transaction fee |
29 | n 8 | Amount. settlement fee |
30 | n 8 | Amount, transaction processing fee |
31 | n 8 | Amount, settlement processing fee |
32 | n ..11 | Acquiring institution identification code |
33 | n ..11 | Forwarding institution identification code |
34 | n ..28 | Primary account number, extended |
35 | z ..37 | Данные трека 2 (Track 2 Data) |
36 | n …104 | Данные трека 3 (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 |
44 | an ..25 | Additional response data |
45 | an ..76 | Данные трека 1 (Track 1 Data) |
46 | an …999 | Дополнительные данные — ISO |
47 | an …999 | Дополнительные данные — National |
48 | an …999 | Дополнительные данные — Private |
49 | a 3 | Currency code, transaction |
50 | an 3 | Currency code, settlement |
51 | a 3 | Currency code, cardholder billing |
52 | b 16 | Personal Identification number data |
53 | n 18 | Security related control information |
54 | an 120 | Additional amounts |
55 | ans …999 | Reserved ISO |
56 | ans …999 | Reserved ISO |
57 | ans …999 | Reserved National |
58 | ans …999 | Reserved National |
59 | ans …999 | Зарезервировано для использования на национальном уровне |
60 | an .7 | Advice/reason code (private reserved) |
61 | ans …999 | Reserved Private |
62 | ans …999 | Reserved Private |
63 | ans …999 | Reserved Private |
64 | b 16 | Message authentication code (MAC) |
65 | b 16 | Bit map, tertiary |
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 | ans …999 | Data record (ISO 8583:1993)/n 4 Message number, last(?) |
73 | n 6 | Date, Action |
74 | n 10 | Credits, number |
75 | n 10 | Credits, reversal number |
76 | n 10 | Debits, number |
77 | n 10 | Debits, reversal number |
78 | n 10 | Transfer number |
79 | n 10 | Transfer, reversal number |
80 | n 10 | Inquiries number |
81 | n 10 | Authorizations, number |
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 15 | Credits, amount |
87 | n 15 | Credits, reversal amount |
88 | n 15 | Debits, amount |
89 | n 15 | Debits, reversal amount |
90 | n 42 | Original data elements |
91 | an 1 | File update code |
92 | n 2 | File security code |
93 | n 5 | Response indicator |
94 | an 7 | Service indicator |
95 | an 42 | Replacement amounts |
96 | an 8 | Message security code |
97 | n 16 | Amount, net settlement |
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 | Зарезервировано для использования в ISO |
106 | ans …999 | Зарезервировано для использования в ISO |
107 | ans …999 | Зарезервировано для использования в ISO |
108 | ans …999 | Зарезервировано для использования в ISO |
109 | ans …999 | Зарезервировано для использования в ISO |
110 | ans …999 | Зарезервировано для использования в ISO |
111 | ans …999 | Зарезервировано для использования в ISO |
112 | ans …999 | Зарезервировано для использования на национальном уровне |
113 | n ..11 | Authorizing agent institution id code |
114 | ans …999 | Зарезервировано для использования на национальном уровне |
115 | ans …999 | Зарезервировано для использования на национальном уровне |
116 | ans …999 | Зарезервировано для использования на национальном уровне |
117 | ans …999 | Зарезервировано для использования на национальном уровне |
118 | ans …999 | Зарезервировано для использования на национальном уровне |
119 | ans …999 | Зарезервировано для использования на национальном уровне |
120 | ans …999 | Зарезервировано для использования конкретными реализаторами стандарта |
121 | ans …999 | Зарезервировано для использования конкретными реализаторами стандарта |
122 | ans …999 | Зарезервировано для использования конкретными реализаторами стандарта |
123 | ans …999 | Зарезервировано для использования конкретными реализаторами стандарта |
124 | ans …255 | Info Text |
125 | ans ..50 | Network management information |
126 | ans .6 | Issuer trace id |
127 | ans …999 | Зарезервировано для использования конкретными реализаторами стандарта |
128 | b 64 | Message Authentication code |
Примеры[править | править код]
Определение поля | Значение |
---|---|
n6 | Поле фиксированной длины в 6 цифр |
n..6 | Числовое поле LLVAR с длиной до 6 цифр |
a..11 | Буквенно-числовое поле LLVAR с длиной до 11 символов |
b…999 | Поле двоичных данных LLLVAR с длиной до 999 байт |
См. также[править | править код]
Ссылки[править | править код]
- DL-ISO-8583 Open-source implementation, written in C (англ.)
- GPL’d ISO8583 Framework (англ.)
- .NET ISO-8583 Framework (англ.)
- jPOS ISO-8583 Framework in Java (англ.)