# ISO 8583 消息解析器：MTI、位图与数据元素

> 如何解析 ISO 8583 金融交易消息——消息类型标识符、位图解码、数据元素定义，以及 ATM NDC/Wincor 格式。

Canonical: https://hsmkit.com/zh/guides/message-parser-iso8583-guide/

Last updated: 2026-05-21

ISO 8583 是金融交易消息的全球标准。它是卡支付、ATM 交易和银行间通信背后的协议。本指南介绍消息结构、MTI、位图、数据元素，以及如何在实践中解析这些消息。

## 什么是 ISO 8583？

ISO 8583 定义了在系统之间交换金融交易信息的消息格式。它被以下系统使用：

- 支付卡网络（Visa、Mastercard）
- ATM 网络
- 销售点系统
- 银行交换系统
- 支付处理商

### 为什么 ISO 8583 很重要

每次您使用卡时：
1. 终端向收单行发送 ISO 8583 消息
2. 收单行路由到卡网络
3. 网络发送到发卡行
4. 发卡行以 ISO 8583 消息响应
5. 响应流回到终端

这在毫秒内完成，全球每天发生数十亿次。

## 消息结构

ISO 8583 消息由以下部分组成：

```
+------------------+
| MTI              |  消息类型指示符（4位数字）
+------------------+
| 位图             |  8 或 16 字节，指示存在的字段
+------------------+
| 数据元素         |  可变数量的字段
+------------------+
```

## 消息类型指示符（MTI）

MTI 标识消息类型和版本。

### MTI 结构

MTI 是一个 4 位数字：

```
位置 1：版本
位置 2：消息类别
位置 3：消息功能
位置 4：消息来源
```

### 版本代码

| 代码 | 版本 |
|------|------|
| 0 | ISO 8583:1987 |
| 1 | ISO 8583:1993 |
| 2 | ISO 8583:2003 |

### 消息类别

| 代码 | 类别 | 描述 |
|------|------|------|
| 1 | 授权 | 卡授权请求 |
| 2 | 金融 | 金融交易 |
| 3 | 文件操作 | 批处理 |
| 4 | 冲正 | 交易冲正 |
| 5 | 对账 | 结算 |
| 8 | 网络管理 | 系统消息 |

### 消息功能

| 代码 | 功能 | 描述 |
|------|------|------|
| 0 | 请求 | 初始请求 |
| 1 | 请求响应 | 对请求的响应 |
| 2 | 通知 | 通知（不需要响应） |
| 3 | 通知响应 | 对通知的响应 |
| 4 | 信息 | 信息性消息 |
| 8 | 保留 | ISO 保留使用 |

### 消息来源

| 代码 | 来源 | 描述 |
|------|------|------|
| 0 | 收单行 | 来自收单银行 |
| 1 | 收单行重发 | 收单行消息重发 |
| 2 | 发卡行 | 来自发卡银行 |
| 3 | 发卡行重发 | 发卡行消息重发 |

### 常见 MTI

| MTI | 描述 |
|-----|------|
| 0100 | 授权请求 |
| 0110 | 授权响应 |
| 0200 | 金融交易请求 |
| 0210 | 金融交易响应 |
| 0220 | 金融交易通知 |
| 0230 | 金融交易通知响应 |
| 0400 | 冲正请求 |
| 0410 | 冲正响应 |
| 0800 | 网络管理请求 |
| 0810 | 网络管理响应 |

## 位图

位图指示消息中存在哪些数据元素。

### 主位图

8 字节（64 位）——每一位代表一个数据元素：

```
位 1：数据元素 1
位 2：数据元素 2
...
位 64：数据元素 64
```

如果位设置为 1，则该数据元素存在。

### 次位图

如果位 1 被设置，则跟随一个次位图：

```
位 1 被设置 → 次位图存在
次位图覆盖元素 65-128
```

### 读取位图

示例位图：`723C048000000000`

转换为二进制：
```
7 = 0111
2 = 0010
3 = 0011
C = 1100
...
```

每个 '1' 表示相应的字段存在。

## 数据元素

ISO 8583 定义了最多 128 个数据元素。

### 常见数据元素

| 字段 | 名称 | 格式 | 长度 |
|------|------|------|------|
| 2 | 主账号（PAN） | LLVAR | 最多 19 |
| 3 | 处理代码 | N | 6 |
| 4 | 交易金额 | N | 12 |
| 7 | 传输日期/时间 | N | 10 |
| 11 | 系统跟踪审计号 | N | 6 |
| 12 | 本地交易时间 | N | 6 |
| 13 | 本地交易日期 | N | 4 |
| 14 | 有效期 | N | 4 |
| 22 | POS 输入方式 | N | 3 |
| 25 | POS 条件代码 | N | 2 |
| 35 | 磁道 2 数据 | LLVAR | 最多 37 |
| 37 | 检索参考号 | AN | 12 |
| 38 | 授权标识响应码 | AN | 6 |
| 39 | 响应码 | AN | 2 |
| 41 | 卡受理终端 ID | ANS | 8 |
| 42 | 卡受理方 ID 代码 | ANS | 15 |
| 43 | 卡受理方名称/位置 | ANS | 40 |
| 52 | PIN 块 | B | 8 |
| 53 | 安全相关控制信息 | N | 16 |
| 55 | ICC 系统相关数据 | LLVAR | 最多 999 |
| 64 | 消息认证码 | B | 8 |

### 数据格式

| 代码 | 格式 | 描述 |
|------|------|------|
| N | 数字 | 仅数字（0-9） |
| AN | 字母数字 | 字母和数字 |
| ANS | 字母数字+特殊字符 | 字母、数字、特殊字符 |
| B | 二进制 | 原始二进制数据 |
| Z | 磁道 2 | 磁道 2 数据格式 |

### 长度编码

| 类型 | 编码 | 示例 |
|------|------|------|
| 固定 | 无长度前缀 | "HELLO" 始终 5 字符 |
| LLVAR | 2 位长度前缀 | "05HELLO" |
| LLLVAR | 3 位长度前缀 | "005HELLO" |

## 实际示例

### 授权请求（0100）

```
MTI: 0100
位图: 723C048000000000

存在的字段:
- 2: PAN (4123456789012345)
- 3: 处理代码 (000000)
- 4: 金额 (000000010000)
- 7: 日期/时间 (0115103000)
- 11: STAN (123456)
- 14: 有效期 (2512)
- 22: POS 输入方式 (051)
- 41: 终端 ID (TERM0001)
- 42: 商户 ID (MERCH0001)
```

### 授权响应（0110）

```
MTI: 0110
位图: 7230000002000000

存在的字段:
- 2: PAN（回显）
- 3: 处理代码（回显）
- 4: 金额（回显）
- 7: 日期/时间（回显）
- 11: STAN（回显）
- 38: 授权码 (ABC123)
- 39: 响应码 (00)
```

## ATM NDC 格式

NDC（NCR Diebold 兼容）是 ATM 使用的 ISO 8583 子集。

### NDC 特定元素

| 字段 | NDC 用途 |
|------|----------|
| 52 | PIN 块（ISO 9564） |
| 53 | 密钥管理信息 |
| 55 | EMV 芯片数据 |
| 61 | ATM 终端数据 |
| 62 | ATM 金融数据 |
| 63 | ATM 网络数据 |

## Wincor 格式

Wincor（现为 Diebold Nixdorf）ATM 使用类似但不同的格式。

### Wincor 差异

- 某些元素的字段分配不同
- 字段 60-63 中的专有扩展
- 不同的消息路由约定

## 解析 ISO 8583 消息

### 逐步解析

1. 读取 MTI（前 4 字节或字符）
2. 读取位图（接下来的 8 或 16 字节）
3. 对于位图中每个设置的位：
   - 根据格式读取数据元素
   - 如果是 LLVAR/LLLVAR 则处理长度前缀
4. 验证所有必需字段都存在

### 常见解析问题

| 问题 | 原因 | 解决方案 |
|------|------|----------|
| 字段数量错误 | 位图读取错误 | 验证位图解析 |
| 消息截断 | 长度计算错误 | 检查 LLVAR/LLLVAR 处理 |
| 无效字符 | 格式不匹配 | 验证 N/AN/ANS 格式 |
| 二进制数据问题 | BCD 与二进制 | 确认编码 |

## 最佳实践

1. **始终先解析位图**——它决定了哪些字段存在
2. **处理主位图和次位图**——检查位 1
3. **尊重长度前缀**——必须正确解析 LLVAR/LLLVAR
4. **验证字段格式**——数字字段应仅包含数字
5. **记录原始消息**——对调试至关重要

## 在线体验

使用我们的 [消息解析器工具](/message-parser)：

- 解析 ISO 8583 消息
- 提取 MTI 和位图
- 解码各个数据元素
- 了解消息结构

该工具支持各种格式，包括 ATM NDC 和 Wincor。

该工具完全在浏览器中运行——数据不会离开您的设备。
