8583报文详细分析
不要以为我这篇文章是告诉你什么是8583,告诉你map的原理,然后分析各个域是什么意思,格式如何, 再有详细一点的甚至告诉你如何写程序等等. 不是, 之所以不写上面这些,基于两点:
1 太多的人写这些了, 网上一搜8583,出来的文章都是关于这些的.
2 作用不大, 因为这些规范上都有, 大家一看规范就明白了, 我写了也是无用.
我篇文章适合两类人看:
1 对8583报文非常熟悉,属于这一领域的资深工程师, 为什么这一类人要看呢, 因为他们看了,可以给我提一些意见和建议.
2 看了很多遍规范,但是还有一些细节不是很明白.
好,我要开始了.
8583报文大部分情况下用在POS终端与后台收单系统的数据交换, 一般情况下(请注意这里的用词)一段完整的报文由以下几个部分组成
图1
不同的应用领域, 上面几个部分大长度和格式上有一些差别, 有一些应用甚至前面的"长度"部分.所以如果等一下你看到下面一些数据的长度或格式跟你的不一样,不要惊讶.
先说说"长度"部分, 一般两个字节, 表示报文的总长度(即"报文头"+"数据"部分的长度), 在两个字节在报文里的表示方法因系统与终端的协议不同而不同. 一般有两种:
1 BCD方法, 比如报文的总长度是134字节, 那么在实际的报文中, 这两个字节为"01h,34h"(注意16进制)
2 实际的计算的长度, 比如还是134长度的字节, 实际的报文中,两个字节为"00h, 86h"(注意也是16进制,00h*256+86h = 134d).
然后说说"报文头", 这一部分不同的系统应用差别也不小, 但一般这部分中会包含TPDU, 这个TPDU决定了终端与系统之间的网络协议. TPDU是一个10位的数字, 实际传输的报文, 有些用ASCII表示这10位数字, 有些用BCD表示, 举个例子:
TPDU是"6000120000",
如果用ASCII表示, 报文中的字节是"36h,30h,30h,30h,31h,32h,30h,30h,30h,30h"(10个字节).
如果用BCD表示, 报文中的字节如下:"60h,00h,12h,00h,00h"(5个字节).
重头戏来了, "数据"部分.
这一部分就是8583了, 我上面说了,我这篇文章只写别人没写过的东西,
so.....,
直接上例子.一段8583报文.
"02 00 70 20 00 00 20 C0 82 00 19 06 20 51 32 00 00 00 02 61 20 60 00 00 00 00 00 02 00 00 00 00 73 37 06 20 51 32 00 00 00 02 61 20 d1 91 12 01 00 00 00 00 00 30 30 30 30 31 31 31 31 31 30 32 32 35 30 31 35 33 31 31 31 31 31 31 01 56 00 44 9f 26 08 92 b6 ae 9a 9b 10 2e d6 9f 27 01 80 9f 10 13 07 01 01 03 a0 a0 10 01 0a 01 00 00 00 10 37 51 3a 22 be"
这是一串实际传输的报文, 上面显示的是这些数据的16进制. 你准备好了吗, 我要开始分析了.
<02 00>
这个是信息类型(MTI), 是一个四位的数字, 这里为"0200", 传输时用BCD表示即为"02h,00h"(如果用ASCII呢?看看上面的内容). 这个四位数字,每一位都有它的意义,
第一位:8583 version number
第二位:message class
第三位:message sub-class
第四位:transaction originator
就不翻译了,毕竟本来就是老外的东西, 自己理解吧.
<70 20 00 00 20 C0 82 00>
bit map域, 指示哪些域存在, 容易计算出, 下面几个域存在:2, 3, 4, 11, 35, 41, 42, 49, 55.
<19 06 20 51 32 00 00 00 02 61 20>
field 2, 账号, n..19, LLVAR, 一字节表示长度(19), 账号是19位, 前面补0后, 用10字节BCD表示.
<60 00 00>
field 3, 处理码, n6, 定长, 用3字节BCD表示
<00 00 00 02 00 00>
field 4, 交易金额, n12, 定长, 用6字节BCD表示, 这里的金额是200.00元
<00 00 73>
field 11, 流水号, n6, 定长, 用3字节BCD表示.流水号为"000073".
<37 06 20 51 32 00 00 00 02 61 20 d1 91 12 01 00 00 00 00 00>
field 35, 二磁道数据, z..35, LLVAR, 一字节表示长度(37), 后面是19字节BCD表示的磁道数据
<30 30 30 30 31 31 31 31>
field 41, 终端号, ans8, 定长, ASCII表示, 这里终端号为"00001111"
<31 30 32 32 35 30 31 35 33 31 31 31 31 31 31>
field 42, 商户号, ans15, 定长, ASCII表示, 这里商户号为"102250153111111"
<01 56>
field 49, 货币代码, n3, 定长, 前面补0后,用两字节BCD表示, 这里货币代码为"156"
<00 44 9f 26 08 92 b6 ae 9a 9b 10 2e d6 9f 27
01 80 9f 10 13 07 01 01 03 a0 a0 10 01 0a 01
00 00 00 10 37 51 3a 22 be>
field 55, 这是IC卡交易的相关数据, 最大长度是255, 这一域用的IC卡数据一般在PBOC/EMV规范里
都有自己的定义(包括格式), 所以,一般在报文里的格式跟它们在PBOC/EMV里定义的一致.一般是TLV(tag+lenght+value)表示一个数据.简单介绍一下数据的意义.
"00 44":长度, 表示44个字节
"9f 26 08 92 b6 ae 9a 9b 10 2e d6":应用密文(application cryptogram), TLV, b8
"9f 27 01 80":密文信息数据(cryptogram information data), TLV, b1
"9f 10 13 07 01 01 03 a0 a0 10 01 0a 01 00 00 00 10 37 51 3a 22 be":
发卡行应用数据(issuer application data), TLV, 变长,最大32字节. b..32.
8583报文详细分析相关推荐
- ModbusTCP协议报文详细分析
ModbusTCP协议分析 ModbusTCP与ModbusUDP的报文格式是一样的,它们之间的区别其实就是TCP与UDP的区别,因此下面就针对ModbusTCP的协议进行分析,ModbusTCP与M ...
- Bank相关11_8583报文手动组包——详细分析每个示范域
8583报文作为一种应用较广的报文,有它独特的格式. 网上有关8583报文的说明很多.但涉及到每个域的详细例子就较少了.这里列出各个域的详细例子,供参考. 8583报文: 报文组成: 报文头[长度(2 ...
- ISO8583报文格式分析
直接上例子.一段8583报文. "02 00 70 20 00 00 20 C0 82 00 19 06 20 51 32 00 00 00 02 61 20 60 00 00 00 00 ...
- 第一章 银联8583报文解析
1报文格式定义 POS终端上送POS中心的消息报文结构包括TPDU.报文头和应用数据三部分: -- TPDU说明:长度为10个字节, 压缩时用BCD码表示为5个字节长度的数值. -- 报文头说明:总长 ...
- 理解类8583报文协议
理解类8583报文协议 编程语言底层之函数执行 https://blog.csdn.net/valada/article/details/79909234 我刚进入金融行业时,就知道了IS08583报 ...
- x264 代码重点详解 详细分析
eg mplayer x264 代码重点详解 详细分析 分类: ffmpeg 2012-02-06 09:19 4229人阅读 评论(1) 收藏 举报 h.264codecflv优化initializ ...
- PPTP 理解以及报文的分析
首先,先来理解下什么是 PPTP.PPTP将PPP(Point-to-Point Protocol)帧封装进IP数据报中,通过IP网络如Internet或其他企业专用Intranet等发送.PPTP通 ...
- 银联银行卡交换系统8583报文解析
前言 最近在做8583报文这块解析,也遇到一些坑.下面将会介绍自己学习和了解8583报文这块的经验,希望可以帮到那些刚刚接触8583报文的同学们. 入门 首先我们需要知道的是我们的8583报文是基于P ...
- java共识算法_PBFT共识算法详细分析及Java实现
PBFT共识算法详细分析及Java实现 为什么写这个 最近研究了区块链相关的一些东西,其实就三大块: 分布式存储(去中心) 共识机制 安全加密 分布式存储,就是一个分布式数据库,每个节点都保存一份副本 ...
最新文章
- 资源 | 12月机器学习TOP 10文章,错过的快补课
- [名词解释] RIAD磁盘阵列
- 计算机硬盘怎么增加e盘和f盘,如何在我的电脑里新建一个磁盘区
- Kubernetes系统架构简介
- 【图数据库】史上超全面的Neo4j使用指南
- 单击CheckBox,全选GridView中所有CheckBox
- Python学到什么程度才可以去找工作?
- easyui Combotree 怎么加载数据 支持多选
- laravel 集成采集_新版2020 Laravel采集网站程序
- 考研(一):一段不错的经历之考研总结
- 【转】离婚男人给女孩的恋爱忠告
- python化学公式配平_如何用矩阵知识配平化学方程式?
- Python3开发 语法(四)
- Pytorch深度学习笔记(02)--损失函数、交叉熵、过拟合与欠拟合
- 水杯测试用例(500ml的塑料水杯)
- 思科计算机基础知识,思科路由器基础知识--存储详解
- python五分制转分数档_五分制绩点换算四分制(5.0绩点计算器在线)
- 使用samba服务在Linux与Windows直接共享文件夹,海康威视网络摄像头录像视频存储到ubuntu服务器
- c语言读取无压缩的cbl的源代码,c语言基础算法案例
- 360全景拼接 opencv_opencv实现的全景图种类与步骤