8583报文手工拆解

来源:互联网 发布:java sleep1000 编辑:程序博客网 时间:2024/04/25 22:39
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://4585258.blog.51cto.com/4575258/837347

                     ISO8583报文手工拆解

  8583报文大部分情况下用在POS终端与后台收单系统的数据交换,一般情况下一段完整的报文由以下几个部分组成:

  ——————————————————————————————————

       长度                         报文头                    8583数据

    ——————————————————————————————————

 长度部分一般两个字节,表示报文的总长度。(“报文头”+“数据”,部分的长度)

TPDU决定了终端与系统之间的网络协议。TPDU是一个10位的数字。

实际传输的报文,有些用ASCII码表示,有些用BCD码表示。

下面来段简单的报文,我给大家详细的解析一下(根据中国银联POS终端规范)

   ——————————————————————————————————

    005f600003000200302044c020c08810210009000000000001005018998802100006

    377689200010172645673d130820147800000000303130303030313230313130303

    030303130303030303131353626000000000000000011260001100000

   ——————————————————————————————————

<00 5f>

报文总长度 95字节

<60 00 03 00 00>

TPDU

<02 00>

这个是信息类型(MTI),是一个四位的数字,这里为“0200”(请求)

传输时用BCD码表示即为“02h 00h”,  每位都有它的意义

第一位:8583 version number

第二位:message class

第三位:message sub-class

第四位:transction originator

下面开始位图的详细解释:

<30 20 44 c0 20 c0 88 10>

bitmap域, 指示哪些域的存在    位图包括基本位图和扩展位图

位图利用BCD码分析。把BCD码的那一位置 “1”,就表示有哪些域。

解析位图如下:

0011000000100000010001001100000000100000110000001000100000010000

这个你就自己数的看吧。解析出来的域有:3,4,11,18,22,25,26,35,41,42,49,53,60。

接下来就是对应每个域的属性,开始对应相应的数据。

<21 00 09>

field 3, 交易处理码,n6, 定长, 用3个字节的BCD码表示。

<00 00 00 00 00 01>

field 4, 交易金额, n12, 定长, 用6个字节BCD码表示,这里金额是0.01元

若为人民币则交易金额的单位是人民币的分。

<00 50 18>

field 11, 流水号, n6, 定长, 用3字节的BCD码表示, 流水号为“005018”。

<99 88>

field 18, 商户类型,n4, 定长,用2字节的BCD码表示。 (商户类型代码行业查询)

<02 1>

field 22, 服务点输入方式, n3, 定长, 在服务终端定义PIN和PAN的输入方式。

<00>

field 25, 服务点条件代码, n2, 定长, 00表示正常交易

<06>

field 26, 服务点PIN获取码,n2,定长,该域描述了服务点设备所允许输入的个人密码明文的最大长度。 

<37 76 89 20 00 10 17 26 45 67 3d 13 08 20 14 78 00 00 00 00>

field 35, 二磁道数据, z..37(LLVAR), 第一个字节表示域的长度(37)

后面19个字节BCD码表示磁道数据,基数位补0或者跳过。

<30 31 30 30 30 30 31 32>

field 41, 终端号, ans8, 定长,ASCII码表示;这里终端号为:“01000012”。

<30 31 31 30 30 30 30 30 31 30 30 30 30 30 31>

field 42, 商户号,ans15, 定长, ASCII码表示;这里的商户号为:“011000001000001”

<31 35 36>

field 49, 货币代码,ans3,定长, ASCII码表示;人民币的代码为:“156”。

<26 00 00 00 00 00 00 00>

field 53, 安全控制信息,n16, 有安全要求时必选

<00 11 26 00 01 10 00 00>

field 60,自定义域, an..011(LLLVAR);两个字节表示长度(00 11),左补齐“0”。

 

ISO8583报文拆解代码见下期。

本文出自 “Linux_new_star” 博客,请务必保留此出处http://4585258.blog.51cto.com/4575258/837347

原创粉丝点击