报文解析学习——8583设计原理

合集下载

8583报文详解

8583报文详解

全面掌握ISO8583报文最开始时,金融系统只有IBM这些大的公司来提供设备,象各种主机与终端等。

在各个计算机设备之间,需要交换数据。

我们知道数据是通过网络来传送的,而在网络上传送的数据都是基于0或1这样的二进制数据,如果没有对数据进行编码,则这些数据没有人能够理解,属于没有用的数据。

起初的X.25、SDLC以及现在流行的TCP/IP网络协议都提供底层的通讯编码协议,它们解决了最底层的通讯问题,能够将一串字符从一个地方传送到另一个地方。

但是,仅仅传送字符串是没有太大意义的,怎样来解析字符串代表什么内容是非常重要的,否则传送一些“0123abcd”的字符串也是无用的乱码。

让我们随着时光回到几十年前的某个时刻,假设我们被推到历史的舞台上,由我们来设计一个通用报文协议,来解决金融系统之间的报文交换,暂且称该协议叫做ISO8583协议。

此时,技术是在不断的前行,当初IBM一支独秀的局面好像已经不妙了,各种大小不一的公司都进入金融行业以求能有所斩获,呈一片百花齐放的局面。

我们怎样来设计一个报文协议,能够将这些如雨后春笋般出现的所有公司都纳入进来,其实也不是一件很简单的事。

我们还是先一步步的来考虑吧。

金融行业其实涉及到的数据内容并不是成千上万,无法统计,恰恰相反,是比较少的。

我们都可以在心底数得过来,象交易类型、帐号、帐户类型、密码、交易金额、交易手续费、日期时间、商户代码、2磁3磁数据、交易序列号等,把所有能够总结出来的都总结起来不过100个左右的数据。

那我们可以首先简单的设计ISO8583,定义128个字段,将所有能够考虑到的类似上面提到的“帐号”等金融数据类型,按照一个顺序排起来,分别对应128个字段中的一个字段。

每个数据类型占固定的长度,这个顺序和长度我们都事先定义好。

这样就简单了,要发送一个报文时,就将128个字段按照顺序接起来,然后将接起来的整串数据包发送出去。

任何金融软件收到ISO8583包后,直接按照我们定义的规范解包即可,因为整个报文的128个字段从哪一位到哪一位代表什么,大家都知道,只要知道你的数据包是ISO8583包即可,我们都已经定义好了。

8583协议

8583协议

ISO8583报文协议最开始时,金融系统只有IBM这些大的公司来提供设备,象各种主机与终端等。

在各个计算机设备之间,需要交换数据。

我们知道数据是通过网络来传送的,而在网络上传送的数据都是基于0或1这样的二进制数据,如果没有对数据进行编码,则这些数据没有人能够理解,属于没有用的数据。

起初的X.25、SDLC 以及现在流行的TCP/IP网络协议都提供底层的通讯编码协议,它们解决了最底层的通讯问题,能够将一串字符从一个地方传送到另一个地方。

但是,仅仅传送字符串是没有太大意义的,怎样来解析字符串代表什么内容是非常重要的,否则传送一些“0123abcd”的字符串也是无用的乱码。

让我们随着时光回到几十年前的某个时刻,假设我们被推到历史的舞台上,由我们来设计一个通用报文协议,来解决金融系统之间的报文交换,暂且称该协议叫做ISO8583协议。

此时,技术是在不断的前行,当初IBM一支独秀的局面好像已经不妙了,各种大小不一的公司都进入金融行业以求能有所斩获,呈一片百花齐放的局面。

我们怎样来设计一个报文协议,能够将这些如雨后春笋般出现的所有公司都纳入进来,其实也不是一件很简单的事。

我们还是先一步步的来考虑吧。

金融行业其实涉及到的数据内容并不是成千上万,无法统计,恰恰相反,是比较少的。

我们都可以在心底数得过来,象交易类型、帐号、帐户类型、密码、交易金额、交易手续费、日期时间、商户代码、2磁3磁数据、交易序列号等,把所有能够总结出来的都总结起来不过100个左右的数据。

那我们可以首先简单的设计ISO8583,定义128个字段,将所有能够考虑到的类似上面提到的“帐号”等金融数据类型,按照一个顺序排起来,分别对应128个字段中的一个字段。

每个数据类型占固定的长度,这个顺序和长度我们都事先定义好。

这样就简单了,要发送一个报文时,就将128个字段按照顺序接起来,然后将接起来的整串数据包发送出去。

任何金融软件收到ISO8583包后,直接按照我们定义的规范解包即可,因为整个报文的128个字段从哪一位到哪一位代表什么,大家都知道,只要知道你的数据包是ISO8583包即可,我们都已经定义好了。

8583报文解析

8583报文解析

8583报文解析
8583报文解析是指对银行卡交易中所使用的8583报文进行分析和解码的过程。

8583报文是一种二进制格式的结构化数据,在银行卡交易中扮演着重要的角色。

通过对8583报文的解析,可以获取交易中所包含的必要信息,如交易类型、交易金额、交易时间等,从而实现交易的成功。

8583报文由多个域(field)组成,每个域包含了特定的信息。

其中,前4个域为固定域,分别为消息类型标识符、位图、主帐号(PAN)、交易处理码。

后续的域则根据交易类型的不同而有所变化,如消费交易会包含卡有效期、商户号、终端号等域。

对于每个域,都有特定的长度和格式要求,例如主帐号域为16位数字字符,交易金额域为12位数字字符等。

在解析8583报文时,需要先解析出位图域,确定哪些域存在于该报文中。

然后根据位图的内容,按照顺序解析出各个域的信息。

在解析过程中,需要注意各个域之间的关联关系和数据类型的转换。

总之,8583报文解析是银行卡交易中必不可少的环节,对于保障交易的正确进行具有重要作用。

- 1 -。

8583报文解析实例

8583报文解析实例

8583报文解析实例8583报文解析实例:以下是主机从网控器收到的消费数据包(用二位十六进制数表示一个字节):0201 0630 30 30 30 3000 06 30 30 30 30 30 31| 03 22备注:|…|之间是8583数据包(|是人为加的);颜色只作为各个域区分,没其他含义。

解包分析:02 表示是数据开始01 06 表示后面数据长度为106个字节(在06到结束符03之间,不包括03字符,即8583包)60 00 07 08 08 是网控tpdu的地址02 00 8583包开始,表示交易信息码 message_id消费信息码为020030 20 05 00 20 c0 02 01 是数据包的位图,8个字节,64位,3的二进制0011第一位为0,所以没有扩展位图,二进制展开后如下域有信息: 3 4 11 22 24 35 41 42 52 60 61 6203 是数据结束??31 是crc校验:02后面开始,即从01开始到03之间字??节(包括03)异或的结果。

??数据元解包分析:实据元是从位图后开始,到03结束之前。

位图分析有3 4 11 22 24 35 41 42 52 60 61 62 域的信息格式说明:a表示字符,n表示数字,s表示特殊字符,b二进制数据第3域:名称:处理代码格式:n6(固定长度为6的数字)截取字符:00 40 00原始数据:“004000”。

第4域:名称:交易金额格式:n12截取字符:00 00 00 00 99 80原始数据:99.80第11域:名称:系统流水号格式:n6截取字符:00 00 01原始数据:000001第22域:名称:服务点方式格式:n3截取字符:00 21原始数据: “021”第24域:名称:国际网络识别符格式:n3截取字符:00 03原始数据:“003”第35域:名称:第2磁道数据格式:llvar长度为37,取整后有19个字符截取字符:37 62 14 02 10 00 07 41 50 78 d1 56 07 12 20 10 00 00 00 00原始数据:62 14 02 10 00 07 41 50 78 d1 56 07 12 20 10 00 00 00 0第41域:名称:终端号格式:ans8 (字母,数字,特殊字符皆可,长度为8)截取字符:31 32 33 34 35 36 37 38原始数据:“12345678”第42域:名称:商户号格式:ans15截取字符:30 34 33 20 20 20 20 20 20 20 20 20 20 20 20原始数据:“043”第52域:名称:个人密码格式:b64 (表示二进制数据64位)截取字符:c5 8e b2 00 18 03 1e 9a原始数据:c5 8e b2 00 18 03 1e 9a第60域:名称:保留使用(实际存放pos的批次号)格式:lllvar长度为00 06截取字符:00 06 30 30 30 30 30 31原始数据:“000001”第61域:名称:保留使用(实际存放操作员和操作员密码)格式:lllvar长度为00 06截取字符:00 06 30 30 30 30 30 30原始数据:“000000”00操作员,0000密码第62域:名称:保留使用(实际存放pos的票据号)格式:lllvar长度为00 06截取字符:00 06 30 30 30 30 30 31原始数据:“000001”。

PCF8583的工作原理及在单片机接口中的实现

PCF8583的工作原理及在单片机接口中的实现

44
!现代电子技术∀ 2006 年第 8 期总第 223 期
( 1) 计数器的功能和方式 通过置位控 制/ 状态 寄存器的相 应位选择32. 768 kHz 时钟方式、 50 Hz 时钟方式 或事件 计数器 方式。读一 个计 数器时, 在读周期的开始 将计数器的 内容锁存到 捕捉寄存 器中。对一个计数器写操作时, 对其他的计数器没有影响。 ( 2) 控制/ 状态寄存器 PCF8583 的 RAM 中 单 元 0 为 状 态/ 控 制 寄 存 器, CPU 可 通过 I C 总 线对 他读 写, 所 有的 功能 选择 都由 控 制/ 状态寄存器中的内容确定。 ( 3) 计数器寄存器 计数器寄存器是可 编程 的。在 时钟方 式中, 置位 时, 计数器的最高 位 可以 选 择 24 小 时或 12 小时 计 数格 式。 时计数器格式如图 2 所 示, 年和日 期寄存器 位于 RAM 的 05 单元, 星期和 月份寄 存器位 于 RAM 的 06 单元。在 控 制/ 状态寄存器中屏蔽 位置位 时, 读年 和日 期寄存 器与 星 期和月份 寄存器时, 年和星 期被屏蔽 掉, 这样 允许用户 之 间读出日期和月份。星 期和 月份寄 存器复 位后 的状态 为 01H, 屏蔽位置位时, 读出的是 0。
2
器均被复位, 复位 后为 32. 768 kHz 时 钟 方式, 24 小时 格 式, 初始时间为 1 月 1 日零点, 中断线 INT 开路。 当电源电压低 于一 定值 时( 典型 值为 1. 9 V) 产生 对 I C接口的复位信号, 但该复位信 号对控 制/ 状 态寄存 器和 计数器没有影响。装入 实时 时间应 注意先 使计 数器停 止 计数( 置位/ 状态 寄存 器中的 停止 计数标 志位) , 装入非 法 的状态将使计数失效。

系统报文精品解析讲稿

系统报文精品解析讲稿

金融系统ISO8583报文精品解析讲稿ISO8583报文理解,举个例子就是农行与VISA网络之间通讯,各个银行间通讯,ATM或POS通讯都是这个ISO8583报文。

再比如第三方支付网银在线与银行之间的通讯报文也是8583。

1234567891011121314面贴片元件的手工焊接技巧现在越来越多的电路板采用表面贴装元件,同传统的封装相比,它可以减少电路板的面积,易于大批量加工,布线密度高。

贴片电阻和电容的引线电感大大减少,在高频电路中具有很大的优越性。

表面贴装元件的不方便之处是不便于手工焊接。

为此,本文以常见的PQFP封装芯片为例,介绍表面贴装元件的基本焊接方法。

一、所需的工具和材料焊接工具需要有25W的铜头小烙铁,有条件的可使用温度可调和带ESD保护的焊台,注意烙铁尖要细,顶部的宽度不能大于1mm。

一把尖头镊子可以用来移动和固定芯片以及检查电路。

还要准备细焊丝和助焊剂、异丙基酒精等。

使用助焊剂的目的主要是增加焊锡的流动性,这样焊锡可以用烙铁牵引,并依靠表面张力的作用光滑地包裹在引脚和焊盘上。

在焊接后用酒精清除板上的焊剂。

二、焊接方法 1.在焊接之前先在焊盘上涂上助焊剂,用烙铁处理一遍,以免焊盘镀锡不良或被氧化,造成不好焊,芯片则一般不需处理。

2.面贴片元件的手工焊接技巧现在越来越多的电路板采用表面贴装元件,同传统的封装相比,它可以减少电路板的面积,易于大批量加工,布线密度高。

贴片电阻和电容的引线电感大大减少,在高频电路中具有很大的优越性。

表面贴装元件的不方便之处是不便于手工焊接。

为此,本文以常见的PQFP封装芯片为例,介绍表面贴装元件的基本焊接方法。

一、所需的工具和材料焊接工具需要有25W的铜头小烙铁,有条件的可使用温度可调和带ESD保护的焊台,注意烙铁尖要细,顶部的宽度不能大于1mm。

一把尖头镊子可以用来移动和固定芯片以及检查电路。

还要准备细焊丝和助焊剂、异丙基酒精等。

使用助焊剂的目的主要是增加焊锡的流动性,这样焊锡可以用烙铁牵引,并依靠表面张力的作用光滑地包裹在引脚和焊盘上。

ISO8583各域详解--整理版

ISO8583各域详解--整理版

ISO8583各域详解8583协议的报文域编码格式分为:BINARY、CHAR、NUMERIC、LLVAR、LLLVAR、LLLVAR_NUMERIC这几种格式。

BINARY采用二进制编码(8位二进制数编码为一个字节)。

CHAR、LLVAR、LLLVAR为ASC(即正常的getBytes(Encoding))编码。

NUMERIC、LLLVAR_NUMERIC采用BCD(半个字节表示一个10进制数,每两位编码为一个字节)编码。

CHAR、BINARY、NUMERIC都需要指定长度。

CHAR类型左对齐、右补空格。

NUMERIC右对齐、左补零。

LLVAR域前加一个字节的字节长度(采用bcd编码)。

LLLVAR域前加两个字节的字节长度(采用bcd编码)。

LLLVAR_NUMERIC域前加两个字节的长度(注:非字节长度,而是数字的长度,即字节长度的两倍)(采用bcd编码)。

代码中会在IsoField setValue时进行格式化,组装报文时计算LLVAR等域长。

ISO8583域说明ATM、前置机间通讯采用ISO8583 包格式。

以下是位元、报文等的定义。

1、信息类型(message type)定义位图位置:-格式:定长类型:N4描述:数据包的第一部分,定义数据包的类型。

数据类型由数据包的发起者设定,应遵循以下要求:数据包开始部分必须是信息类型;对不支持的信息类型能给出拒绝应答。

0100授权交易0110授权交易答复0200金融交易0210金融交易答复0240查询交易0250查询交易答复0400冲正交易0410冲正交易答复0800管理交易0810管理交易答复2、位图(Bit Map) - 基本位图和扩展位图位图位置:01格式:定长类型:B16描述:如将位图的第一位设为'1',表示使用扩展位图,否则表示只使用基本位图。

如使用某数据域,应在位图中将相应的位设位'1',如使用41域,需将位图的41位设为'1'。

ISO8583各域详解--整理版

ISO8583各域详解--整理版

ISO8583各域详解8583协议的报文域编码格式分为:BINARY、CHAR、NUMERIC、LLVAR、LLLVAR、LLLVAR_NUMERIC这几种格式。

BINARY采用二进制编码(8位二进制数编码为一个字节)。

CHAR、LLVAR、LLLVAR为ASC(即正常的getBytes(Encoding))编码。

NUMERIC、LLLVAR_NUMERIC采用BCD(半个字节表示一个10进制数,每两位编码为一个字节)编码。

CHAR、BINARY、NUMERIC都需要指定长度。

CHAR类型左对齐、右补空格。

NUMERIC右对齐、左补零。

LLVAR域前加一个字节的字节长度(采用bcd编码)。

LLLVAR域前加两个字节的字节长度(采用bcd编码)。

LLLVAR_NUMERIC域前加两个字节的长度(注:非字节长度,而是数字的长度,即字节长度的两倍)(采用bcd编码)。

代码中会在IsoField setValue时进行格式化,组装报文时计算LLVAR等域长。

ISO8583域说明ATM、前置机间通讯采用 ISO8583 包格式。

以下是位元、报文等的定义。

1、信息类型(message type)定义位图位置:-格式:定长类型:N4描述:数据包的第一部分,定义数据包的类型。

数据类型由数据包的发起者设定,应遵循以下要求:数据包开始部分必须是信息类型;对不支持的信息类型能给出拒绝应答。

0100授权交易0110授权交易答复0200金融交易0210金融交易答复0240查询交易0250查询交易答复0400冲正交易0410冲正交易答复0800管理交易0810管理交易答复2、位图(Bit Map) - 基本位图和扩展位图位图位置:01格式:定长类型:B16描述:如将位图的第一位设为'1',表示使用扩展位图,否则表示只使用基本位图。

如使用某数据域,应在位图中将相应的位设位'1',如使用41域,需将位图的41位设为'1'。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8583报文设计原理
ISO8583报文(简称8583包)又称8583报文是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。

8583包前面一段为位图,用来确定包的字段域组成情况。

其中位图是8583包的灵魂,它是打包、解包确定字段域的关键。

而了解每一个字段域的属性则是填写数据的基础。

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

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

——应用数据说明:一般长度都是4个字节,压缩时用BCD码表示为2个字节的长度的数值。

所以,
上述报文中前五个字节为TPDU,即60 00 03 00 00 (红线标注)
报文头占用六个字节,即60 31 00 31 07 30 (蓝线标注)
应用数据占用两个字节,即02 00 也就是"0200"。

应用数据部分指定消息类型(例如余额查询、消费等交易等消费类型)(黑线标注)
应用数据之后的若干个字节表示位图。

首先取第十四个字节,即0x30,转化为二进制00110000,在该字节的第一位为0(从左往右)表示当前报文中只需要包括64个域(用8个字节表示),也就是从当前字节开始连续8个字节为位图(包括当前字节),如果要包括128个域(用16个字节表示),该位为1。

《1》位图分析:(bit map 域指定了哪些域存在。

域是从1开始的)
取表示位图的8个字节即30 20 04 C0 20 C0 98 11转化为二进制为:
00110000 00100000 00000100 11000000 00100000 11000000 10011000 00010001
位图中为1的位置即代表相应的域,在上面的二进制位中从左往右有第3位、第4位、第11位、第22位、第25位、第26位、第35位、第41位、第42位、第49位、第52位、第53位、第60位、第64位。

《2》具体对域进行分析
3域。

查看银联规范可知,3域为交易处理码,压缩成BCD码后占定长3个字节(参考银联规范可知)。

从位图所占的8个字节以后(第22个字节)开始连续取3个字节,即00 00 00
解压后即为“000000”,具体代表的含义可以参考中国银联规范的第八节消息域说明。

4域为交易金额,压缩成BCD码后占定长6个字节,同理(从上文3域的三个字节以后开始)取六个字节,即00 00 00 00 00 01也就是金额为0.01元(如果币种为人民币,单位是人民币的分)
11域为受卡方系统跟踪号(流水号),压缩成BCD码占定长3个字节,同理取3个字节,即00 03 49,即000349。

22域为服务点输入方式码,压缩成BCD码占定长2个字节,同理取2个字节,即0210
由于22域本身只占3个字节,压缩时左靠,右补0,所以转换为“021”。

25域为服务点输入方式码,压缩成BCD码占定长1个字节,同理取1个字节,即00,转化为“00”,
“00”代表正常提交。

26域为服务点PIN获取码,压缩成BCD码占定长1个字节,同理取1个字节,即12,转换为“12”,表示服务点设备所允许输入的个人密码明文的最大长度为12.
35域不是定长,所以处理方法不同。

先取一个字节,即30,转换为“30”,表示第二磁道的数据占用30个字节,取连续15个字节即62 25 82 21 12 99 63 01 5D 15 11 10 10 00 00。

41域为受卡机终端标识码,占8个字节的定长域,取35 36 38 35 32 33 31 34
42域为受卡方标识码,占15个字节的定长域,取32 33 35 32 31 34 35 32 36 38 35 39 32 33 36
49域为交易货币代码,占3个字节的定长域,取31 35 36。

52域为个人标识码数据,占8个字节的定长二进制数据,取C6 24 83 4D 36 7E 9E 9E
53域为安全控制信息,压缩成BCD码占8个字节定长域,取20 00 00 00 00 00 00 00
60域为自定义域,为不定长域,先取长度(压缩成BCD码占两个字节),即00 13,转换为13。

表示在60域占13个字节,压缩成BCD码占7个字节,取22 00 00 08 00 05 00
64域为报文鉴别码,占定长8个字节,取最后8个字节36 37 41 32 32 39 39 41
除了上述的分析以外,有些系统采用的报文数据会有细微的区别,下面举例说明。

注意:a、有些报文数据中最开始部分会包含一个“长度”的指定。

该长度指定了tpdu、报文头、应用数据、位图……等的所有报文数据总共包含的字节数。

举例:列举一段报文数据如下,
------------------ 接收数据----------------------
00 5B 60 00 02 00 00 60 31 00 31 00 47 08 00 00
20 00 00 00 C0 00 16 00 00 81 32 35 38 35 36 33
39 35 31 32 33 34 35 38 35 36 39 38 35 36 36 35
35 00 11 00 00 00 01 00 30 00 29 53 65 71 75 65
6E 63 65 20 4E 6F 31 36 33 31 35 38 33 32 30 41
47 31 31 31 31 31 31 31 00 03 30 31 20
其中00 5B部分表示“长度”,一般占用两个字节,长度的两个字节在报文里面的表示方法因系统与终端的协议不同而不同。

一般有两种方法:
(1)BCD方法, 比如报文的总长度是134字节, 那么在实际的报文中, 这两个字节为"01h,34h"(注意16进制)
(2)实际的计算的长度, 比如还是134长度的字节, 实际的报文中,两个字节为"00h, 86h"(注意也是16进制,00h*256+86h = 134d).《此处采用第二种方法》00H 5BH对应的十进制为91,表示报文总长度为91
b、TPDU部分决定了终端与系统之间的网络协议,实际传输的报文中,有些用ASCII表
示,有些用BCD表示。

例如,
TPDU是"6000120000",
如果用ASCII表示, 报文中的字节是"36h,30h,30h,30h,31h,32h,30h,30h,30h,30h"(10 个字节).
如果用BCD表示, 报文中的字节如下:"60h,00h,12h,00h,00h"(5个字节).。

相关文档
最新文档