Открыть меню

Протокол ISO 8583

Создано 5 мая 2026 г. Обновлено 2 июн. 2026 г. 10 мин чтения

Справочная заметка 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ОписаниеНаправление
0100Authorization RequestATM → Хост
0110Authorization ResponseХост → ATM
0120Authorization AdviceATM → Хост
0130Authorization Advice ResponseХост → ATM
0200Financial Transaction RequestATM → Хост
0210Financial Transaction ResponseХост → ATM
0220Financial Transaction AdviceATM → Хост
0230Financial Transaction Advice RespХост → ATM
0400Reversal RequestATM → Хост
0410Reversal ResponseХост → ATM
0420Reversal AdviceATM → Хост
0430Reversal Advice ResponseХост → ATM
0800Network Management RequestATM → Хост
0810Network 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НазваниеТипДлинаОписание
F2Primary Account Number (PAN)LLVAR19Номер карты
F3Processing CodeN6Тип операции: 2+2+2 (операция+from+to счёт)
F4Transaction AmountN12Сумма в минимальных единицах валюты
F5Settlement AmountN12Сумма в валюте расчётов
F6Cardholder Billing AmountN12Сумма в валюте держателя
F7Transmission Date & TimeN10MMDDhhmmss
F9Conversion Rate, SettlementN8Курс конвертации
F11System Trace Audit Number (STAN)N6Уникальный номер транзакции терминала
F12Time, Local TransactionN6hhmmss
F13Date, Local TransactionN4MMDD
F14Date, ExpirationN4YYMM
F15Date, SettlementN4MMDD
F18Merchant Type (MCC)N46011 = ATM
F22POS Entry ModeN3051=chip+PIN, 021=mag, 071=contactless
F25POS Condition CodeN200=normal, 01=unattended
F28Transaction Fee AmountX+N9Комиссия за транзакцию
F32Acquiring Institution IDLLVAR11ID банка-эквайера
F33Forwarding Institution IDLLVAR11ID forwarding банка
F35Track 2 DataLLVAR37Данные Track 2 магнитной полосы
F37Retrieval Reference Number (RRN)AN12Уникальный референс (эквайер)
F38Authorization Identification ResponseAN6Код авторизации (от эмитента)
F39Response CodeAN2Код ответа (00=OK, 51=NSF…)
F41Card Acceptor Terminal IDANS8ID терминала (ATM)
F42Card Acceptor ID CodeANS15ID точки обслуживания
F43Card Acceptor Name/LocationANS40Адрес и название ATM
F49Transaction Currency CodeN3ISO 4217: 643=RUB, 840=USD, 978=EUR
F50Settlement Currency CodeN3Валюта расчётов
F51Cardholder Billing CurrencyN3Валюта выписки держателя
F52Personal Identification Number (PIN) DataB8Зашифрованный PIN Block
F53Security Related Control InfoN16Параметры безопасности
F54Additional AmountsLLLVAR120Балансы и дополнительные суммы
F55ICC Data (EMV)LLLVAR255TLV данные EMV чипа
F60Additional POS InformationLLLVAR999Зависит от схемы, доп. данные
F90Original Data ElementsN42Данные оригинального сообщения (reversals)
F95Replacement AmountsN42Фактические суммы (partial reversal)
F102Account Identification 1LLVAR28Номер счёта From
F103Account Identification 2LLVAR28Номер счёта 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)

КодОписание
021Mag stripe read
051ICC (EMV Chip) read, PIN
071Contactless (NFC) — chip
079Contactless (NFC) — mag stripe emulation
901Mag stripe (fallback from chip)
991Unknown / not determined

Форматы полей

ОбозначениеРасшифровкаПример
NNumeric, фиксированная длина000000010000
AAlphaABCDE
ANAlphanumericABC123
ANSAlpha+Numeric+SpecialATM MOSCOW-01
BBinary0x1A2B3C...
X+NЗнак (C/D) + цифрыC000001000
LL2-digit length prefix06123456
LLL3-digit length prefix010ABCDEFGHIJ
LLVAR2-digit length + var dataПоле 2: 16 + PAN
LLLVAR3-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НазваниеПример
9F26Application Cryptogram (ARQC)8 байт
9F27Cryptogram Information Data1 байт
9F10Issuer Application Data (IAD)var
9F37Unpredictable Number4 байта
9F36ATC (Application Transaction Counter)2 байта
9ATransaction Date3 байта
9CTransaction Type1 байт
9F02Amount, Authorized6 байт
5F2ATransaction Currency Code2 байта
82Application Interchange Profile (AIP)2 байта
84Dedicated File (DF) NameAID
95Terminal Verification Results (TVR)5 байт
9BTransaction 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 prefix2 или 4 байта перед сообщением = длина тела
TPDU headerTransaction 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 на уровне шлюза.


Источники


Связанные заметки

Ссылаются на эту заметку

Источник: публичный слой Obsidian Vault.