转载:8583报文简单分析

http://blog.csdn.net/pony_maggie/article/details/6568192

不要以为我这篇文章是告诉你什么是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.

时间: 2024-10-05 11:08:33

转载:8583报文简单分析的相关文章

转:8583报文手动组包——详细分析每个示范域

8583报文作为一种应用较广的报文,有它独特的格式. 网上有关8583报文的说明很多.但涉及到每个域的详细例子就较少了.这里列出各个域的详细例子,供参考. 8583报文: 报文组成: 报文头[长度(2字节)+TPDU(5字节)+报文版本号(2字节)]+信息类型+位图+数据 TPDU: 6000100000 报文长度:整体报文长度 -报文头中的2字节长度.如8583整体报文长度为100,那么报文长度为98.用两字节的BCD码表示(16进制)为0062.手动组装的8583报文: 0072600010

[转载]通达信插件选股(基于通达信插件编程规范的简单分析)

[转载]通达信插件选股(基于通达信插件编程规范的简单分析) 原文地址:通达信插件选股(基于通达信插件编程规范的简单分析)作者:哈尔滨猫猫 首先声明,鄙人是编程人员,不是股民.对选股概念了解甚少.本文仅作编程人员学习借鉴之用.不对选股理论进行探讨和解释. 以前有客户找我做过通达信插件选股的小任务,当时第一次接触面向接口(此类“接口”)编程,也是第一次接触到股票里相关的概念.最近由于接手一个任务,与上次开发相类似,故旧事重提,仔细研究一番.将个人学习研究所得知识与大家分享.在网上搜相关资料,可用的.

FFmpeg源代码简单分析:avio_open2() (转载)

FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 FFmpeg源代码结构图 - 编码 [通用] FFmpeg 源代码简单分析:av_register_all() FFmpeg 源代码简单分析:avcodec_register_all() FFmpeg 源代码简单分析:内存的分配和释放(av_malloc().av_free()等) FFmpeg 源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等) FFmpeg 源代

关于数字证书理解的简单整理以及12306网站证书简单分析

首先简单理解一下什么是数字证书.这里是一篇英文文档,描述的很形象.形象的描述了什么是公钥,什么是私钥,如果确保数字证书的可靠性等. 下面,我们看一个应用"数字证书"的实例:https协议.这个协议主要用于网页加密. 一般我们电脑的浏览器中都有一些受信任的证书颁发机构列表, 里边存储的都是一些机构的信息.这些机构都是权威的.当然可以通过安装软件的方式,来增加证书颁发机构,比如中国银行的根证书软件,阿里巴巴的根证书软件.默认我们认为这些软件都是从官网下载的,是绝对的没被篡改的,可靠的.简单

FFmpeg源代码简单分析:avformat_open_input()

本文简单分析FFmpeg中一个常用的函数:avformat_open_input().该函数用于打开多媒体数据并且获得一些相关的信息.它的声明位于libavformat\avformat.h,如下所示. /** * Open an input stream and read the header. The codecs are not opened. * The stream must be closed with avformat_close_input(). * * @param ps Po

8583报文(转)

1 8583报文 1.1 数据包格式 ISO 8583金融交易信息数据包由信息类型(MSG_TYPE_ID).一个或多个位图(BIT_MAP)和按位图描述的顺序排列的数据元序列(ELEMENTS)等三段组成. 信息类型是一个4位数字的数字型字段,用来描述每一个交易信息的类别和功能,其中前两位数字标明信息类别,如授权信息.金融交易信息.管理信息,等等.在一个金融系统中,信息类型的定义应该是唯一的,无二义性的.网间交易具有不同的信息类型定义时应在交换报文的发送前和接收后完成类型转换处理. 位图由64

FFmpeg源代码简单分析——sws_getContext()

FFmpeg源代码简单分析——sws_getContext() 转载地址:http://www.ithtw.com/2032.html FFmpeg sws_scale分析1 转载地址:http://www.w2bc.com/Article/19701

iOS POS之8583报文组装工具

在组装8583报文时会遇到各种转码,比如:ASCII转Hex , data数据转相应的16进制字符串. 在这里我把代码贴出来,当然了,我这份代码也是在各处搜集而来,并不是自己开发的. @interface NSString (Trans) /** *  十六 进制字符串转换为 data *  24211D3498FF62AF  -->  <24211D34 98FF62AF> * *  @param str 要转换的字符串 * *  @return 转换后的数据 */ + (NSData

Nubia Z5S官方4.4 UI2.0音频Audio部分简单分析(也适用于其他8974/8064机型)以及减少破音出现几率的方法

转载请注明出处和网址链接: http://blog.csdn.net/syhost/article/details/31419749 此篇本是在Z5S的官方4.4内测版出来时写的, 主要是看到其在audio的配置文件里没有es325的相关配置, 因此断定不支持z5sn的一些audio特性,本想喷一下, 结果第二天官方自己写了.. 本人先前在安智论坛也发过一篇通过修改snd_soc_msm的audio配置文件来调整一些音量的方法, 但本人4月之后编译的Z5S的Android4.4的ROM已经采用了