Протокол ISO 8583
Справочная заметка ATM: Протокол ISO 8583.
Протокол ISO 8583
Обзор
ISO 8583 — международный стандарт для обмена финансовыми транзакционными сообщениями между банковскими системами. Разработан ISO (International Organization for Standardization).
Версии:
- ISO 8583:1987 — ранняя версия стандарта, встречается в legacy-профилях.
- ISO 8583:1993 — ревизия, также встречается в legacy-профилях.
- ISO 8583-1:2003 — отозвана ISO; заменена новой редакцией.
- ISO 8583:2023 — актуальная опубликованная редакция ISO по состоянию на 2026-05-28.
Применяется для ATM- и POS-сообщений между участниками карточной операции. Важно: ISO 8583 задает интерфейс обмена сообщениями, структуру и формат, но не определяет транспортный уровень и не описывает, как именно выполняется settlement.
[!warning] Профили важнее “чистого” стандарта Реальные ATM-сети используют профили ISO 8583: правила Visa/Mastercard/МИР/UnionPay, процессинговые расширения, private fields и локальные таблицы response code. Поля ниже нужно читать как типовой ориентир, а не как универсальную спецификацию для любой сети.
Структура сообщения ISO 8583
Каждое сообщение состоит из трёх частей:
┌─────────┬───────────────────┬──────────────────────────────┐
│ MTI │ BITMAP │ DATA ELEMENTS │
│ 4 bytes │ 8 or 16 bytes │ переменная длина │
│ (MMMM) │ (Primary+Secondary│ Field 2 ... Field 128 │
└─────────┴───────────────────┴──────────────────────────────┘
MTI — Message Type Indicator
MTI — 4 цифры, определяют тип и направление сообщения:
M M M M
│ │ │ └── Originator (0=Acquirer, 2=Card issuer, 4=Other…)
│ │ └──── Function (0=Request, 1=Response, 2=Advice, 3=Advice resp, 4=Notification…)
│ └────── Class (0=Auth, 1=Financial, 2=File action, 4=Reversal, 8=Network mgmt…)
└──────── Version (0=ISO 8583:1987, 1=ISO 8583:1993, 2=ISO 8583:2003)
Таблица MTI для ATM
| MTI | Описание | Направление |
|---|---|---|
| 0100 | Authorization Request | ATM → Хост |
| 0110 | Authorization Response | Хост → ATM |
| 0120 | Authorization Advice | ATM → Хост |
| 0130 | Authorization Advice Response | Хост → ATM |
| 0200 | Financial Transaction Request | ATM → Хост |
| 0210 | Financial Transaction Response | Хост → ATM |
| 0220 | Financial Transaction Advice | ATM → Хост |
| 0230 | Financial Transaction Advice Resp | Хост → ATM |
| 0400 | Reversal Request | ATM → Хост |
| 0410 | Reversal Response | Хост → ATM |
| 0420 | Reversal Advice | ATM → Хост |
| 0430 | Reversal Advice Response | Хост → ATM |
| 0800 | Network Management Request | ATM → Хост |
| 0810 | Network Management Response | Хост → ATM |
BITMAP
Bitmap — битовая маска, показывающая какие поля (Data Elements) присутствуют в сообщении.
- Primary bitmap: 8 байт (64 бита) — поля 1–64
- Secondary bitmap: ещё 8 байт — поля 65–128 (если бит 1 primary = 1)
- Бит N=1 означает, что поле N присутствует в сообщении
Primary Bitmap: F2 38 00 00 20 00 00 10
В бинарном: 1111 0010 0011 1000 0000 0000 0000 0000
2001 0000 0000 0001
0000 0000 0000 0000
Расшифровка битов (1-based):
Бит 1 = 1 → Secondary bitmap присутствует
Бит 2 = 1 → F2 (PAN) присутствует
Бит 3 = 1 → F3 (Processing Code) присутствует
Бит 4 = 1 → F4 (Amount) присутствует
...
Data Elements (поля) — полный справочник ATM
| DE | Название | Тип | Длина | Описание |
|---|---|---|---|---|
| F2 | Primary Account Number (PAN) | LLVAR | 19 | Номер карты |
| F3 | Processing Code | N | 6 | Тип операции: 2+2+2 (операция+from+to счёт) |
| F4 | Transaction Amount | N | 12 | Сумма в минимальных единицах валюты |
| F5 | Settlement Amount | N | 12 | Сумма в валюте расчётов |
| F6 | Cardholder Billing Amount | N | 12 | Сумма в валюте держателя |
| F7 | Transmission Date & Time | N | 10 | MMDDhhmmss |
| F9 | Conversion Rate, Settlement | N | 8 | Курс конвертации |
| F11 | System Trace Audit Number (STAN) | N | 6 | Уникальный номер транзакции терминала |
| F12 | Time, Local Transaction | N | 6 | hhmmss |
| F13 | Date, Local Transaction | N | 4 | MMDD |
| F14 | Date, Expiration | N | 4 | YYMM |
| F15 | Date, Settlement | N | 4 | MMDD |
| F18 | Merchant Type (MCC) | N | 4 | 6011 = ATM |
| F22 | POS Entry Mode | N | 3 | 051=chip+PIN, 021=mag, 071=contactless |
| F25 | POS Condition Code | N | 2 | 00=normal, 01=unattended |
| F28 | Transaction Fee Amount | X+N | 9 | Комиссия за транзакцию |
| F32 | Acquiring Institution ID | LLVAR | 11 | ID банка-эквайера |
| F33 | Forwarding Institution ID | LLVAR | 11 | ID forwarding банка |
| F35 | Track 2 Data | LLVAR | 37 | Данные Track 2 магнитной полосы |
| F37 | Retrieval Reference Number (RRN) | AN | 12 | Уникальный референс (эквайер) |
| F38 | Authorization Identification Response | AN | 6 | Код авторизации (от эмитента) |
| F39 | Response Code | AN | 2 | Код ответа (00=OK, 51=NSF…) |
| F41 | Card Acceptor Terminal ID | ANS | 8 | ID терминала (ATM) |
| F42 | Card Acceptor ID Code | ANS | 15 | ID точки обслуживания |
| F43 | Card Acceptor Name/Location | ANS | 40 | Адрес и название ATM |
| F49 | Transaction Currency Code | N | 3 | ISO 4217: 643=RUB, 840=USD, 978=EUR |
| F50 | Settlement Currency Code | N | 3 | Валюта расчётов |
| F51 | Cardholder Billing Currency | N | 3 | Валюта выписки держателя |
| F52 | Personal Identification Number (PIN) Data | B | 8 | Зашифрованный PIN Block |
| F53 | Security Related Control Info | N | 16 | Параметры безопасности |
| F54 | Additional Amounts | LLLVAR | 120 | Балансы и дополнительные суммы |
| F55 | ICC Data (EMV) | LLLVAR | 255 | TLV данные EMV чипа |
| F60 | Additional POS Information | LLLVAR | 999 | Зависит от схемы, доп. данные |
| F90 | Original Data Elements | N | 42 | Данные оригинального сообщения (reversals) |
| F95 | Replacement Amounts | N | 42 | Фактические суммы (partial reversal) |
| F102 | Account Identification 1 | LLVAR | 28 | Номер счёта From |
| F103 | Account Identification 2 | LLVAR | 28 | Номер счёта To (переводы) |
Processing Code (F3) — структура
F3 состоит из 6 цифр: PP FF TT
| Позиция | Значение |
|---|---|
| PP (Transaction Type) | 00=Purchase, 01=Withdrawal, 21=Deposit, 31=Balance Inquiry, 40=Transfer, 90=PIN Change |
| FF (From Account) | 00=Default, 10=Savings, 20=Checking, 30=Credit, 40=Universal |
| TT (To Account) | Аналогично FF (для переводов) |
Примеры:
01 00 00— снятие наличных с основного счёта31 00 00— запрос баланса21 00 00— депозит40 10 20— перевод с сберегательного на текущий
POS Entry Mode (F22)
| Код | Описание |
|---|---|
| 021 | Mag stripe read |
| 051 | ICC (EMV Chip) read, PIN |
| 071 | Contactless (NFC) — chip |
| 079 | Contactless (NFC) — mag stripe emulation |
| 901 | Mag stripe (fallback from chip) |
| 991 | Unknown / not determined |
Форматы полей
| Обозначение | Расшифровка | Пример |
|---|---|---|
| N | Numeric, фиксированная длина | 000000010000 |
| A | Alpha | ABCDE |
| AN | Alphanumeric | ABC123 |
| ANS | Alpha+Numeric+Special | ATM MOSCOW-01 |
| B | Binary | 0x1A2B3C... |
| X+N | Знак (C/D) + цифры | C000001000 |
| LL | 2-digit length prefix | 06123456 |
| LLL | 3-digit length prefix | 010ABCDEFGHIJ |
| LLVAR | 2-digit length + var data | Поле 2: 16 + PAN |
| LLLVAR | 3-digit length + var data | Поле 55: 142 + ICC data |
Пример транзакции Withdrawal — hex dump (схематичный)
MTI: 0200
F2: 16 4276123456789012 (PAN, 16 цифр)
F3: 010000 (Withdrawal)
F4: 000000500000 (5000.00 RUB)
F7: 0505142235 (05/05 14:22:35)
F11: 123456 (STAN)
F12: 142235 (время)
F13: 0505 (дата)
F14: 2712 (декабрь 2027)
F18: 6011 (MCC ATM)
F22: 051 (chip + PIN)
F25: 00 (normal)
F35: ...Track2... (только при mag)
F37: 202505051001 (RRN)
F41: ATM00001 (Terminal ID)
F42: 123456789012345 (Acceptor ID)
F43: SBERBANK ATM MOSCOW RED SQ (Location)
F49: 643 (RUB)
F52: 0x0123456789ABCDEF (PIN Block, 8 байт)
F55: ...EMV TLV data... (ICC data)
Field 55 — EMV ICC Data (TLV)
F55 содержит EMV-данные в формате TLV (Tag-Length-Value):
| Tag | Название | Пример |
|---|---|---|
| 9F26 | Application Cryptogram (ARQC) | 8 байт |
| 9F27 | Cryptogram Information Data | 1 байт |
| 9F10 | Issuer Application Data (IAD) | var |
| 9F37 | Unpredictable Number | 4 байта |
| 9F36 | ATC (Application Transaction Counter) | 2 байта |
| 9A | Transaction Date | 3 байта |
| 9C | Transaction Type | 1 байт |
| 9F02 | Amount, Authorized | 6 байт |
| 5F2A | Transaction Currency Code | 2 байта |
| 82 | Application Interchange Profile (AIP) | 2 байта |
| 84 | Dedicated File (DF) Name | AID |
| 95 | Terminal Verification Results (TVR) | 5 байт |
| 9B | Transaction Status Information (TSI) | 2 байта |
Field 54 — Additional Amounts (структура баланса)
Каждый баланс в F54 кодируется блоком 20 символов:
AA TTTT CCC SSSS NNNNNNNNNNNN
│ │ │ │ └── Amount (12 digits)
│ │ │ └─────── Sign (C=Credit, D=Debit)
│ │ └─────────── Currency (ISO 4217)
│ └──────────────── Account Type (0000=default, 1000=savings...)
└──────────────────── Amount Type (01=ledger, 02=available)
Пример (Available balance 12500.00 RUB):
02 0000 643 C 000000001250000
Транспортный уровень ISO 8583
Сам стандарт не определяет транспорт и формат сетевого фрейминга. Типичные реализации:
| Транспорт | Описание |
|---|---|
| TCP/IP + TLS | Современный стандарт |
| Length prefix | 2 или 4 байта перед сообщением = длина тела |
| TPDU header | Transaction Protocol Data Unit — 5 байт заголовок (устаревающий) |
| ISO 8583 over HTTP | Редко, для REST-адаптеров |
Типичный frame:
[2 байта длина][тело ISO 8583]
Пример: 0x00C2 [194 байта данных]
ISO 8583 vs ISO 20022
[!info] ISO 20022 — новый финансовый стандарт ISO 20022 (XML/JSON-based) активно принимается для межбанковских расчётов (SWIFT, SEPA, СБП). Для ATM-транзакций ISO 8583 остаётся стандартом де-факто. Некоторые процессинговые центры уже выстраивают адаптеры ISO 8583 ↔ ISO 20022 на уровне шлюза.
Источники
- ISO: ISO 8583:2023 — Financial-transaction-card-originated messages.
- ISO: ISO 8583-1:2003 — withdrawn, new version available ISO 8583:2023.
Связанные заметки
- ATM-Протоколы-обзор — сравнительный обзор протоколов
- ATM-Процессинг-обзор — таблица кодов F39, типы транзакций
- ATM-No-Dispense-и-Reversal — поля F90, F95
- ATM-Withdrawal-Sequence — ISO 8583 в sequence diagram
- TERM-iso-8583 · TERM-stan · TERM-rrn · TERM-mti