ISO 8583 是金融交易消息的国际标准——每次您在 ATM 或 POS 终端刷卡,都会生成一条 ISO 8583 消息。本文解释该格式及如何解析它。
什么是 ISO 8583?
ISO 8583 定义了以下各方之间电子金融交易消息的格式:
- ATM 与银行
- POS 终端与收单机构
- 收单机构与卡组织(Visa、Mastercard)
- 银行间系统
该标准自 1987 年以来一直在使用,至今仍是全球支付处理的骨干。
消息结构
ISO 8583 消息由以下部分组成:
[MTI] [位图] [数据元素]
1. 消息类型标识符(MTI)
标识消息类型的 4 位代码:
| MTI | 描述 |
|---|---|
| 0100 | 授权请求 |
| 0110 | 授权响应 |
| 0200 | 金融交易请求 |
| 0210 | 金融交易响应 |
| 0400 | 冲正请求 |
| 0420 | 冲正通知 |
| 0800 | 网络管理请求 |
| 0810 | 网络管理响应 |
MTI 由四个部分组成:
- 版本:0(1987)、1(1993)、2(2003)
- 消息类别:1=授权,2=金融,4=冲正,8=网络
- 消息功能:0=请求,1=响应,2=通知,3=通知响应
- 消息来源:0=收单方,2=发卡方,4=其他
2. 位图
位图是一个 64 位(8 字节)字段,指示消息中存在哪些数据元素。
- 主位图:始终存在(64 位 = 字段 1-64)
- 次位图:字段 1 置位时存在(字段 65-128)
每个位对应一个字段编号:
- 第 1 位(第一字节 MSB)= 字段 1(次位图)
- 第 2 位 = 字段 2
- ...以此类推
示例:位图 F230040102C00000 表示字段 1、2、3、4、7、11、12、13、22、25、41、42 存在。
使用 ISO 8583 位图解析器 即时解码任何位图。
3. 数据元素
ISO 8583 定义了多达 192 个数据元素(字段)。常用字段:
| 字段 | 名称 | 类型 | 长度 |
|---|---|---|---|
| 2 | 主账号(PAN) | LLVAR | 最多 19 位 |
| 3 | 处理代码 | 固定 | 6 |
| 4 | 交易金额 | 固定 | 12 |
| 7 | 传输日期/时间 | 固定 | 10 |
| 11 | 系统跟踪审计号(STAN) | 固定 | 6 |
| 12 | 本地交易时间 | 固定 | 6 |
| 13 | 本地交易日期 | 固定 | 4 |
| 22 | POS 输入模式 | 固定 | 3 |
| 35 | 磁道 2 数据 | LLVAR | 最多 37 |
| 37 | 检索参考号 | 固定 | 12 |
| 38 | 授权识别响应 | 固定 | 6 |
| 39 | 响应码 | 固定 | 2 |
| 41 | 卡受理终端 ID | 固定 | 8 |
| 42 | 卡受理方代码 | 固定 | 15 |
| 49 | 货币代码 | 固定 | 3 |
| 52 | PIN 数据(加密) | 固定 | 16 |
| 55 | ICC 数据(EMV) | LLLVAR | 最多 255 |
| 64 | MAC(主) | 固定 | 16 |
| 128 | MAC(次) | 固定 | 16 |
响应码
字段 39 包含响应码:
| 代码 | 含义 |
|---|---|
| 00 | 批准 |
| 05 | 不予受理 |
| 12 | 无效交易 |
| 14 | 无效卡号 |
| 51 | 余额不足 |
| 54 | 卡已过期 |
| 55 | PIN 错误 |
| 91 | 发卡方不可用 |
| 96 | 系统故障 |
ISO 8583 中的 PIN
字段 52 包含加密的 PIN 块(通常为 8 字节 / 16 个十六进制字符)。PIN 在放入此字段前使用 PIN 加密密钥(PEK)加密。
PIN 块格式(通常为 ISO 9564 格式 0)将 PIN 与 PAN 结合。详见 PIN 块指南。
ISO 8583 中的 MAC
字段 64 和 128 包含消息认证码,用于验证消息完整性。MAC 使用 MAC 密钥对特定字段计算。
详见 MAC 算法指南。
AS2805——澳大利亚 EFTPOS
AS2805 是基于 ISO 8583 的澳大利亚标准,在字段定义和 MAC 计算上有一些差异。
使用 AS2805 消息解析器 进行 AS2805 专用解析。
ATM NDC 和 Wincor 协议
ATM 通常使用厂商专有协议:
- NCR NDC:NCR ATM 使用
- Wincor/Diebold:Wincor Nixdorf ATM 使用
这些是封装 ISO 8583 消息的更高层协议。消息解析器 支持 NDC 和 Wincor 格式。
实践:解析一条交易消息
给定原始 ISO 8583 消息:
0200F230040102C000000000000000001600412345678901234500000000010000...
- 前 4 个字符:MTI =
0200(金融交易请求) - 接下来 16 个字符:主位图 =
F230040102C00000 - 解析位图找出存在哪些字段
- 按顺序读取每个字段
使用 ISO 8583 位图解析器 解码位图。
在线工具
- ISO 8583 位图解析器 —— 解码任何 ISO 8583 位图
- AS2805 消息解析器 —— 解析 AS2805 消息
- 消息解析器 —— 解析 ATM NDC 和 Wincor 消息
- PIN 块工具 —— 编码/解码 PIN 块(字段 52)
- HMAC 计算器 —— 计算 MAC 值(字段 64/128)