# ISO8583协议
Date: 2022-03-19


### **背景介绍**

在银行卡支付领域，经常提到“8583”， 他是金融机构中银行卡交易使用的一种内部协议。使用场景主要是终端如POS, ATM等金融终端到银行收单系统， 以及银行卡系统间。协议出现时期， 网络主要还是PSTN网络，电话拨号方式接入方式。考虑到带宽限制以及交易实时性要求，所以结构设计很紧凑，报文长度是1K左右，一般不会大于2K， 涉及数字的域还会采用BCD编码，从而减少报文长度。当然后续由于芯片卡应用，报文长度也有所增加。

### **银行卡的一些事**

国际上最早的通用信用卡产生于20世纪50年代，1949年9月一天，纽约金融金融家麦克纳马拉与其好友布卢明代尔，在一家高档餐馆就餐，结账时发现现金不够，只好请其妻子来付款。这件事情给了麦克纳马拉重要启示，他和布卢明代尔一起策划了餐馆赊账网络， 发行一种可以记账的卡片，这就是大莱卡的开端。

![](https://garlicspace.com/wp-content/uploads/2022/03/dinner-300x215.jpg)

受大莱卡的启发， 美国市场上出现了各种旅游娱乐卡， 美国运通公司凭借其遍布全球的旅行俱乐部及旅行者服务，后来居上最终成为旅游娱乐卡的领先者。

![](https://garlicspace.com/wp-content/uploads/2022/03/美运-300x300.jpg)

1951年，富兰克林银行在纽约长岛开始发行其首张信用卡，银行的主要收入来源是向零售商收取的5-7%的商户扣率， 持卡人无须支付任何直接费用。

1958年，美洲银行发行一种蓝、白、金三色组成，并带有飞鸽图案的银行卡，1976年，美洲银行卡公司更名为维萨（VISA）。

![](https://garlicspace.com/wp-content/uploads/2022/03/visa-300x180.png)

1966年， 一批银行家汇聚在美国的水牛城，召开了具有历史意义的第一次会议。并联合建立“同业银行卡协会”， 1979年银行卡协会更名为万事达卡国际组织，商标“MasterCard”。

![](https://garlicspace.com/wp-content/uploads/2022/03/master-300x238.png)

1961年，日本信用卡株式会社（JCB）发行行用卡， 1981年开展国际业务。

![](https://garlicspace.com/wp-content/uploads/2022/03/jcb-300x232.jpg)

2002年3月26日， 由国内80多家金融机构共同发起涉及的股份金融机构---中国银联成立。 注册资金16.5亿元人民币，总部设立在上海。

![](https://garlicspace.com/wp-content/uploads/2022/03/银联-300x207.jpg)

 

### **第一张人民币信用卡**

1985年，中国银行珠海分行发行中国第一张人民币信用卡。

![](https://garlicspace.com/wp-content/uploads/2022/03/第一张信用卡.png)

### **ISO 8583报文中包含信息**

#### ![](https://garlicspace.com/wp-content/uploads/2022/03/iso8583-300x119.png)

 

### **ISO8583报文格式**

ISO 8583银行卡交换报文规范，目前的三个版本：

- IS08583:1987
- IS08583:1993
- IS08583:2003

3 个版本之间没有大的区别，主要字段长度和数据元素的变化

ISO 8583 做为通用标准被采用，同时存在一些保留字段可用于存放自定义字段。

### **ISO8583报文格式**

![](https://garlicspace.com/wp-content/uploads/2022/03/MTI-1024x532.png)

![](https://garlicspace.com/wp-content/uploads/2022/03/bitmap-1024x537.png)

- 各个域包含卡片信息，商户信息，交易信息
- 每个域都有自己的含义和语法
- 各个字段格式包括：数字、字母数字、固定或者可变长

### **ISO8583报文样例**

一笔银行卡消费为例：MTI 0100 + 第三域的 000000 初步判断为一笔银行卡授权交易，一般是信用卡消费，当让根据这两个域的有多种组合，可以代表多种交易。

```
01 00 30 20 05 00 20 C0 10 1C 00 00 00 00 00 00 00 99 80 00 00 01 00 21 00 03 37 62 14 02 10 00 07 41 50 78 d1
56 07 12 20 10 00 00 00 00 31 32 33 34 35 36 37 38 30 34 33 20 20 20 20 20 20 20 20 20 20 20 20 c5 8e b2 00 18
03 1e 9a 00 06 30 30 30 30 30 31 00 06 30 30 30 30 30 30 00 06 30 30 30 30 30 31

01 00 
报文类型标识符
格式：n4 
内容：0100

```

位图：根据位图按照每个域指定的格式进行解析即可

```
30 20 05 00 20 C0 10 1C
```

### ![](https://garlicspace.com/wp-content/uploads/2022/03/iso8583bitmap.png)

第3域定长域：

```
00 00 00 
第3域：交易处理码
格式：n6
内容：000000
```

第4域定长，当然要配合币种49域一起，当然这个演示报文还是有些问题

```
第4域：金额
格式：n12
内容： 000000009980  

```

35域变长字段：

```
37 62 14 02 10 00 07 41 50 78 d1 56 07 12 20 10 00 00 00 00 
第35域：磁道信息
格式：z ..37 
内容：37 62 14 02 10 00 07 41 50 78 d1 56 07 12 20 10 00 00 00 00
```

可以看到这种协议由较强的专用性， 各个域均为银行卡交易设计， 各个银行和卡组也可以他通过一些域存放一些特殊字段。但是由于其协议长度限制，扩展非常不方便。

针对各类编码类型和长度类型都有定义，按照规则解析即可。另外，各个机构间有自定域或者长度格式有所不同，还要根据实际情况进行处理。

![](https://garlicspace.com/wp-content/uploads/2022/03/iso8583-var-1024x326.png) ![](https://garlicspace.com/wp-content/uploads/2022/03/iso8583-len-1024x174.png)

图片来源 https://en.wikipedia.org/wiki/ISO\_8583

 

### **ISO8583通讯方式**

协议并没有定义通讯协议， 一般都由系统自己定义或者网络设备进行约定。早期的POS通过网控器接入系统， 网控器一般会要求终端配置TPDU，通过TPDU用来进行路由判断，将终端交易转发到后端指定系统。

报文格式采用：报文长度+报文内容形式，

通讯协议早期还有X.25协议，串口等方式进行通讯的，后续大多使用TCP/IP协议。

下面是H3C方案里的一个图片， 基本上描述了当时的网络环境。

![](https://garlicspace.com/wp-content/uploads/2022/03/ienpos.png)

图片来源： http://www.h3c.com/cn/d\_201003/665952\_30008\_0.htm

 

### **第三方支付**

随着互联网发展，第三方支付公司异军突起，1998年，第三方支付公司PayPal 成立， 线上支付逐渐走进人们的生活， 后来国内第三方支付公司也逐步发展壮大，当时有一大批第三方支付公司和银行对接， 大部分用的都是ISO8583协议的接口。

智能手机普及，移动支付更加方便，大家更多使用移动支付，条码支付，这给传统银行卡的收单业务带来很大竞争压力，  传统银行收单市场逐渐被蚕食，当然后续发展大家也知道， 第三方支付公司逐步被纳入监管，通过网联完成到银行对接。这时通讯协议逐渐转向使用 http/https  报文使用XML，json这种更容易扩展的接口。

做为一种传统金融交易协议ISO8583 目前卡组和银行还有在使用，他将继续在金融组织内部发挥他的作用。

 

### **参考及引用**

JCB  https://zh.wikipedia.org/wiki/JCB

Diners Club  https://en.wikipedia.org/wiki/Diners\_Club\_International

国际信用卡组织 图片来自 百度百科

Learn Payments 做了一些视频，有兴趣的可以去看下。

https://www.youtube.com/watch?v=SiCbF8phxhA

封面图片 [陳恩安](https://www.facebook.com/groups/474930279315210/user/100000181968636/?__tn__=-UC*F)

