ISO 8583包(简称8583报文),金融交易卡原始电文-交易电文规范,是一个由国际标准化组织为其定义了消息格式和交易流程,以便于不同的系统能够交换交易请求和响应信息。8583报文交融交易信息数据包由消息类型、位图和按位图描述的顺序排列的数据系列组成。

(1).消息类型是一个4位数字的数字型字符,用来描述每一个交易信息的类别和功能,其中前两位数组标明信息类别,如授权信息、金融交易信息、管理信息,等等。在一个金融系统中,信息类型的定义应该是唯一的,无二义性的。网间交易具有不同的信息类型定义时应在交换报文的发送前和接收后完成类型转换处理。

(2).位图由64位或128位二进制位构成,每一位用1或0来表示与该位相对应的数据元存在或不存在。位图的第一位位1时,表示64位图后紧接着一个扩展的64位位图。

(3).数据元指交易中一个数据项的实际内容,数据元在数据包中是否存在及存放位置由位图中的相应位确定、一些数据元有固定的长度,一些数据元为变长。

  8583报文=报文长度(2个字节)+TPDU+报文头+报文体。

TPDU说明:长度为10个字节,压缩时用BCD码表示为5个字节长度的数值。
报文头说明:总长度为12字节,压缩时用BCD码表示为6个字节长度的数值。

报文体说明:是由消息类型+位图+数据元组成。

(网上也有比较现成的工具,只要你提供报文,就可以解析出具体报文。)

PS:位图

位图,Bitmap,由64位或128位二进制位构成!例如

位图:  00 20 00 00 00 C0 00 16

转化为二进制:  00000000 00100000 00000000 00000000 00000000 11000000 00000000 000101100  (1位十六进制对应4位二进制)

有效域 :  11域,41域, 42域 ,60域 ,62域 ,63域。

所以,我们需要根据8583报文规范去查找这些数据域的描述(每一域代表什么意思,数据域长度,数据类型等等),就可以得到具体的意思。例如,

2域表示 主账号,

N..19(LLVAR),2个字节的长度值+最大19个字节的主账号,压缩时用BCD码表示的1个字节的长度值+用左靠BCD码表示的最大10个字节的主账号。

下面看一个交易实例。

1.签到请求交易,

00 5E 60 00 03 00 00 60 21 00 00 00 00 08 00 00 20 00 00 00 C0 00 16 00 00 48 35 34 37 31 39 30 34 39 38 39 38 33 32 30 31 39 33 39 39 31 37 30 32 00 12 00 00 00 00 00 30 00 32 53 65 71 75 65 6E 63 65 20 4E 6F 31 39 30 30 30 30 41 39 32 30 2D 30 38 32 30 30 32 37 33 39 35 00 03 30 30 31

报文解析

00 5E 长度

60 00 03 00 00 TPDU
60 21 00 00 00 00 报文头
08 00 消息类型
00 20 00 00 00 C0 00 16 Bitmap
00 00 48 ----11域 受卡方系统跟踪号
35 34 37 31 39 30 34 39 --41域 受卡机终端标识码
38 39 38 33 32 30 31 39 33 39 39 31 37 30 32 --42域 受卡方标识码
00 12 00 00 00 00 00 30 ---60域
00 32 53 65 71 75 65 6E 63 65 20 4E 6F 31 39 30 30 30 30 41 39 32 30 2D 30 38 32 30 30 32 37 33 39 35 --62域
00 03 30 30 31 --63域(001)
消息类型说明:一般长度都是4个字节,压缩时用BCD码表示为2个字节的长度的数值。
消息类型占用2个字节,即 08 00 也就是"0800" 

2.签到响应报文

00 74 60 00 00 00 03 61 31 00 00 00 00 08 10 00 38 00 00 0A C0 00 14 00 00 48 10 25 52 05 16 35 34 31 34 30 36 32 35 34 34 30 32 30 30 35 34 37 31 39 30 34 39 38 39 38 33 32 30 31 39 33 39 39 31 37 30 32 00 12 00 00 00 00 00 30 00 40 D1 C3 65 E4 00 E1 79 29 13 AF 07 CD 19 06 9A 07 D2 B9 1C C5 AE E9 84 62 B2 66 5F 24 00 00 00 00 00 00 00 00 AD C6 7D 84

报文解析

00 74 长度
60 00 00 00 03 TPDU
61 31 00 00 00 00 报文头
08 10 消息类型
00 38 00 00 0A C0 00 14 Bitmap
00 00 48 --11域
10 25 52 --12域 受卡方所在地时间
05 16 -13域 受卡方所在地日期
35 34 31 34 30 36 32 35 34 34 30 32 --37域 检索参考号
30 30 --39域 应答码 (00-交易成功)
35 34 37 31 39 30 34 39 -41域
38 39 38 33 32 30 31 39 33 39 39 31 37 30 32 ---42域
00 12 00 00 00 00 00 30 --60域
00 40
D1 C3 65 E4 00 E1 79 29 13 AF 07 CD 19 06 9A 07 D2 B9 1C C5 pik
AE E9 84 62 B2 66 5F 24 00 00 00 00 00 00 00 00 AD C6 7D 84 mak
62域长度为40位,前20个字节为PIN的工作秘钥的密文,后20个字节是MAC的工作秘钥的密文。(其中,“PIN工作秘钥”前16个字节是密文,后4个字节是checkvalue;前16个字节解出明文后,对8个数值0做双倍长秘钥算法,取结果的前四位与checkvalue的值比较应该是一致的;“MAC工作秘钥”前8个字节是密文,再8个字节是二进制0,后4个字节是checkvalue;前8个字节解出明文后,对8个数值0做单倍长秘钥算法,取结果的前4位与checkvalue的值比较应该是一致的)。
需要校验pik和mak,请参考POS 秘钥 这篇文章。
PS:
1. 数据类型。

POS终端与POS中心之间的交换消息中,各数据元类型如下所列:

00001—— A 字母向左靠,右部多余部分填空格。

00002—— AN 字母和/或数字,左靠,右部多余部分填空格。

00003—— ANS 字母、数字和/或特殊符号,左靠,右部多余部分填空格。

00004—— AS 字母和/或特殊符号,左靠,右部多余部分填空格。

00005—— B 二进制bit位。

00006—— DD 日。

00007—— hh 时。

00008—— LL 可变长域的长度值(二位数)。

00009—— LLL 可变长域的长度值(三位数)。

00010—— MM 月。

00011—— mm 分。

00012—— N 数值,右靠,首位有效数字前充零。若表示金额,则最右二位为角分。

00013—— S 特殊符号。

00014—— ss 秒。

00015—— VAR 可变长域。

00016—— X 借贷符号,在数值之前,D表示借,C表示贷。

00017—— YY 年。

00018—— Z 由ISO 7811和ISO 7813制定的磁条卡第二、三磁道的数据类型。

00019—— CN BCD压缩编码数值。

对可变长数据元,以下例说明:

00020—— 变量XYZ的数据类型为ANS...999(LLLVAR),则表示:该变量中可含字母、数字和特殊符号,最长不超过999个字符,长度由三位数字确定。

00021—— 变量XYZ的数据类型为N...999(LLLVAR),则在压缩时,其长度位用右靠的BCD码压缩,而其后紧随的数字内容用左靠的BCD码压缩。这是为了保证有效内容和其位数中间无缺省填充值。若不为偶数位,左靠的数字内容后补零。由于有长度位表征该域有效内容的长度,因此后补零不会改变该域的真实值。

推荐文章,POS 银行卡应用主要功能!

ISO 8583报文相关推荐

  1. C解析8583报文55域

    以下这段代码是C解析8583报文,我直接从我们系统粘贴出来的,供大家参考.打日志log部分,请自行更改,TAG标签也可以根据你的55域做相应删减. typedef struct {         c ...

  2. 关于8583报文详解

    本文章是对8583报文深入的解析,主要是针对于8583报文已经很熟悉的人 我们来看一段8583报文: 0059600045000060011100000001007024048000C08011166 ...

  3. 第一章 银联8583报文解析

    1报文格式定义 POS终端上送POS中心的消息报文结构包括TPDU.报文头和应用数据三部分: -- TPDU说明:长度为10个字节, 压缩时用BCD码表示为5个字节长度的数值. -- 报文头说明:总长 ...

  4. 8583报文格式介绍

    在金融行业中,经常会用到8583报文,那么到底什么是8583报文呢? 8583是这样的,我举一个简单的例子 以64个域的报文来举例 域是什么我也说不清楚,我来举个例子 你可以把它想象为医院放药的抽屉 ...

  5. 谈谈8583报文的使用及测试

    ISO8583报文在金融行业可谓是声名显赫,8583报文是一个国际标准的包格式,其重要性阿堂就不用多说了,网上有很多的介绍,不过对于一个从未接触过8383报文的新手来说,还是很有难度的.它主要是用来解 ...

  6. 理解类8583报文协议

    理解类8583报文协议 编程语言底层之函数执行 https://blog.csdn.net/valada/article/details/79909234 我刚进入金融行业时,就知道了IS08583报 ...

  7. 银联银行卡交换系统8583报文解析

    前言 最近在做8583报文这块解析,也遇到一些坑.下面将会介绍自己学习和了解8583报文这块的经验,希望可以帮到那些刚刚接触8583报文的同学们. 入门 首先我们需要知道的是我们的8583报文是基于P ...

  8. 《中国银联银联卡受理终端应用规范》笔记(1)银联8583报文解析

    0. 前言 阅读的规范版本为20140404修订版 1. 报文格式说明 POS终端上送POS中心的消息报文结构包括TPDU.报文头和应用数据三部分: TPDU 报文头 应用数据 ISO8583 Msg ...

  9. 8583报文举例解读及推荐阅读

    一.推荐阅读 https://www.cnblogs.com/fenglan/p/6088690.html 这篇博客生动形象的解释了8583报文,首先推荐给之前一点都不了解8583报文的同学. 然后参 ...

最新文章

  1. Android adb常用命令
  2. “ px”,“ dip”,“ dp”和“ sp”有什么区别?
  3. 怎么打开外部文件_保存的DWG文件再次用CAD打开时提示文件损坏了怎么办?【AutoCAD教程】...
  4. spring datasource oracle,spring中2种oracle数据源的配置
  5. PAT之树:一般树、二叉树、完全二叉树、二叉搜索树、二叉平衡树、并查集
  6. [2018.10.18 T3] 小 G 的线段树
  7. 基于springboot旅游系统
  8. 方法重写与方法重载的区别
  9. 关闭windows默认共享
  10. python3图片文字识别
  11. 今日头条安卓_考察今日头条总部—字节跳动
  12. Android chrome默认设置Autoplay policy
  13. android简单视频播放器,推荐用于Android超简单视频播放器的ArtPlayer
  14. 一篇读懂springboot用echarts实现实时柱状图和饼状图查询
  15. 勇敢面对人生的苦难,时光不负赶路人
  16. 《朱子治家格言》原文
  17. cfd-post 流线很少
  18. Go语言中的Map和List实现有序Map
  19. freeswitch通过limit限制cps
  20. 手把手教你用Arcgis绘制地图【热力图】

热门文章

  1. ubuntu安装程序权限问题
  2. Hibernate课堂笔记
  3. Windows任务管理器参数解释
  4. Python如何将仅包含音频内容的Mp4,提取并转换为Mp3
  5. 三大功能升级,暴风AI无屏电视Max6S开启众筹
  6. 每个元音包含偶数次的最长子字符串——打死我也想不到的代码
  7. 【高速接口-RapidIO】6、Xilinx RapidIO核仿真与包时序分析
  8. 还在苦恼验证码怎么实现?这个验证码合集,你想要的都有
  9. JSTL中taglib uri=prefix=的使用
  10. 免费Web接口调用大全