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处理代码固定64交易金额固定127传输日期/时间固定1011系统跟踪审计号(STAN)固定612本地交易时间固定613本地交易日期固定422POS 输入模式固定335磁道 2 数据LLVAR最多 3737检索参考号固定1238授权识别响应固定639响应码固定241卡受理终端 ID固定842卡受理方代码固定1549货币代码固定352PIN 数据(加密)固定1655ICC 数据(EMV)LLLVAR最多 25564MAC(主)固定16128MAC(次)固定16
响应码
字段 39 包含响应码:
代码含义00批准05不予受理12无效交易14无效卡号51余额不足54卡已过期55PIN 错误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)