`
lhc1986
  • 浏览: 161309 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

(转载)解析ISO8583报文实例

 
阅读更多

本篇文章参考了中国银联POS终端规范,所以如有不明白的可以去我的资源里面下载。


现在我们有ISO8583报文如下(十六进制表示法):

60 00 03 00 00 60 31 00 31 07 30 02 00 30 20 04 C0 20 C0 98 11 00 00 00 00 00 00 00 00 01 00 03 49 02 10 00 12 30 62 25 82 21 12 99 63 01 5D 15 11 10 10 00 00 35 36 38 35 32 33 31 34 32 33 35 32 31 34 35 32 36 38 35 39 32 33 36 31 35 36 C6 24 83 4D 36 7E 9E 9E 20 00 00 00 00 00 00 00 00 13 22 00 00 08 00 05 00 36 37 41 32 32 39 39 41


第一步

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

应用数据占用2个字节,即 02 00 也就是"0200"

——0200金融类请求消息:

●   POS查询请求。

●   POS消费请求。

●   POS消费撤销请求。

●   POS预授权完成(请求)请求。

●   POS预授权完成撤销请求。

●   电子现金脱机消费请求。

●   分期付款消费请求。

●   分期付款消费撤销请求。

●   基于PBOC电子钱包/电子现金的IC圈存类交易请求。

●   磁条卡现金充值请求。

第二步

分析位图:

首先取第十四个字节,即0x30 ,转化为二进制为0011 0000,在该字节的第一位为0(从左往右)表示当前报文中只需包括64个域,也就是从当前字节开始连续8个字节为位图(包括当前字节),如要包括128个域,该位为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位。

下面开始这些域中的数据,首先分析3域,3域为交易处理码,压缩成BCD码后占定长3个字节,我们从位图所占的8个字节后开始连续取3个字节,即 00 00 00,解压后即为“000000”,具体代表含义这里就不叙述了。

4域为交易金额,压缩成BCD码后占定长6个字节,同理取6个字节,即00 00 00 00 00 01,也就是金额0.01元,具体转换参考银联规范。

11域为受卡方系统跟踪号(流水号),压缩成BCD码占定长3个字节,同理取3个字节,即00 03 49,即000349。

22域为服务点输入方式码,压缩成BCD码占定长2个字节,同理取2个字节,即02 10,由于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个字节,取最后八个字节36 37 41 32 32 39 39 41。

分享到:
评论
3 楼 Nature_myJava 2016-01-13  
你好,请问你还保存有POS终端规范的报文样例吗,包括签到和消费的,有的话能否发我一份,924943578@qq.com,谢谢
2 楼 lhc1986 2015-12-25  
albrich 写道
博主你好,我是做预付卡系统的,看了你的报文解释真的是对8583协议理解更进一步了,非常感谢,还有一个问题就是:60域和35域都不是定长,为什么60域先取2个字节而35域只先取了一个字节呢,希望博主帮忙解答下

两位变长bcd编码是一个字节,3位变长就是两个字节。
1 楼 albrich 2015-08-14  
博主你好,我是做预付卡系统的,看了你的报文解释真的是对8583协议理解更进一步了,非常感谢,还有一个问题就是:60域和35域都不是定长,为什么60域先取2个字节而35域只先取了一个字节呢,希望博主帮忙解答下

相关推荐

    iso8583实例解析银联报文(java)

    在Java中,解析ISO8583报文通常需要自定义解析器或者使用已有的开源库。报文通常由固定长度和可变长度的字段组成,解析过程包括以下几个步骤: 1. **位图解析**:位图(Bitmap)是ISO8583报文中的关键部分,它指示了...

    银联iso8583简单解析实例(java)

    本文将深入探讨如何在Java环境中解析银联ISO8583报文,以及如何通过提供的代码示例`Iso8583Util.java`和`Helloworld.java`进行实践。 ISO8583协议定义了一个固定长度的报文结构,包含了多个字段,每个字段都有其...

    iso8583 报文解析 8583精髓

    通过以上步骤,我们便能够逐步解析ISO8583报文中的各个字段,获取报文中的关键信息。 ### 总结 ISO8583协议虽然看起来复杂,但其实只要掌握了位图的概念和字段的解析方法,就能够轻松地理解和应用它。通过本篇文章...

    ISO8583报文协议详解

    ### ISO8583报文协议详解 #### 一、概述 ...理解这些内容对于正确构建和解析ISO8583报文至关重要。通过这些知识,开发人员可以更加高效地集成不同系统之间的支付功能,提高交易的安全性和可靠性。

    bank.rar_8583_8583报文_c# 8583

    这个“bank.rar_8583_8583报文_c# 8583”文件可能是包含了一个C#实现的ISO 8583消息解析器或生成器的源代码库。在银行系统开发中,理解和处理8583报文是至关重要的,因为它确保了不同金融机构间数据传输的一致性和...

    iso8583go:golang的打包和解包iso8583消息

    `iso8583go`库提供了便捷的方法来创建、解析和操作这些报文。这使得开发者能够更高效地处理金融交易请求和响应,而无需手动处理底层的二进制编码和解码。 在`iso8583go-master`压缩包中,你可能找到以下组件: 1. `...

    ISO9506-MMS-制造报文规范

    《ISO9506-MMS-制造报文规范》是一个重要的工业自动化领域的标准,它定义了制造系统之间通信的一种报文结构和交互机制。MMS(Manufacturing Message Specification)是这个标准的核心,它旨在提高工厂自动化环境中的...

    ISO15765协议实例报文解析说明.pdf

    文档还提供了手动获取ISO15765协议数据并进行人工解析的使用方法。如果购买的是带OBD转接头的版本,可以直接使用配套的OBD转接头,OBD公头直插汽车OBD的母头,OBD转接头引出线红色(内部连接OBD6号引脚)接USBCAN...

    j8583_changebyjone.zip

    《深入解析ISO8583协议与J8583库的应用》 ISO8583协议是金融行业内广泛使用的报文交换标准,用于处理银行间各种交易,如ATM取款、转账等。该协议定义了金融交易的结构和编码规则,其中包含了大量变长字段,比如63域...

    第三章 UDS协议实车实例解析.docx

    ### UDS协议实车实例解析 #### 背景与目的 随着汽车电子技术的不断发展,车载网络系统作为实现汽车内部各个子系统间通信的重要手段,其重要性日益凸显。在众多车载通信协议中,统一诊断服务(Universal Diagnostic...

    8583协议java实现

    8583协议是金融行业中广泛使用的一种报文交换标准,全称为ISO 8583,用于在银行系统之间传输各种交易数据,如转账、查询余额等。它定义了一套标准的消息结构,使得不同系统间的数据交换变得更加规范化和高效。在Java...

    jPOS-1_9_2.zip

    这个版本的jPOS提供了对ISO8583标准的全面支持,这是金融行业中广泛使用的报文格式。 **ISO8583:金融交易的标准协议** ISO8583是国际标准化组织定义的一种通信协议,用于在金融机构之间交换金融交易数据。这个...

    ISO_15765全套,最新2016 +部分中文.rar

    ISO 15765是国际标准化组织...以上是对"ISO_15765全套,最新2016 +部分中文.rar"文件内容的详细解析,涵盖ISO 15765标准的核心概念、应用和最新进展。对于汽车行业的技术人员来说,理解和掌握这些知识是至关重要的。

    decentralized-ISO20022

    用于解析,创建和处理ISO20022消息。 系统总览 系统概述。 发送和接收pacs.008消息 用于通过微服务发送和接收pacs.008消息的序列图。通信服务代表微服务的一个实例。 用于结算和付款 微服务的示例用例,该支付在...

    K线通信协议中文精华版

    6. TL718实验报文:可能介绍了特定的实验报文实例,用于测试和验证。 附录部分提供了附加信息,例如关键字的可能值、KWP2000中否定应答代码以及物理地址分配表等。 在实际应用中,KWP2000协议广泛用于汽车故障诊断...

    CAN协议在ISO 11898的协议规范

    这篇详细解析将深入探讨CAN总线在ISO 11898中的关键概念和技术细节。 ### 一、CAN协议基础 CAN协议最初由BOSCH公司开发,设计目标是提高汽车内部电子系统的可靠性和效率。其主要特点包括多主站架构、错误检测与...

    ISO11898_CAN_physical_layer

    这些字段共同构成了CAN报文,使得网络上的节点能正确解析和响应。 **四、错误检测与处理** ISO 11898标准还规定了错误检测和错误处理机制,如位错误、帧错误和CRC错误等。当检测到错误时,节点会通过错误标志向网络...

Global site tag (gtag.js) - Google Analytics