ISO8583 按PBOC要求完成8583信息的组包及解包

来源:互联网 发布:数据采集卡原理 编辑:程序博客网 时间:2024/06/06 08:50

一般指令有两种类型:

TPDU、报文头和应用数据三部分,另外有种只有应用数据部分


现在我们有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。

------------------------------------------------------------------------------------------------------------------------------

不包括TPDU、报文头,只有应用数据部分:

例2:

02 00 70 20 0000 20 C0 82 00 19 06 20 51 32 00 00 00 02 61 20 60 00 00 00 00 00 02 00 00 0000 73 37 06 20 51 32 00 00 00 02 61 20 d1 91 12 01 00 00 00 00 00 30 30 30 3031 31 31 31 31 30 32 32 35 30 31 35 33 31 31 31 31 31 31 01 56 00 44 9f 26 0892 b6 ae 9a 9b 10 2e d6 9f 27 01 80 9f 10 13 07 01 01 03 a0 a0 10 01 0a 01 0000 00 10 37 51 3a 22 be

 

【信息类型[MIT] 位图位置:--】

02 00 :

BCD表示 02h,00h;

0:8583 version number(版本信息)

2:message class

0:message subclass

0:transaction originator

[0100]授权交易,[0110]授权交易答复

[0200]金融交易,[0210]金融交易答复

[0240]查询交易,[0250]查询交易答复

[0410]冲正交易,[0410]冲正交易答复

[0800]管理交易,[0810]管理交易答复

【bit map域:位图位置:1】

70 20 00 00 20 C0 82 00 :

格式:定长,类型,B16

描述:使用某数据域,在位图的响应位设为1.

0111 0000 0010 0000 0000 0000 0000 0000 0010 0000 1100 0000 1000 0010 0000 0000

指示哪些域存在,容易计算 下面几个域存在:2,3,4,11,35,41,42,49,55

【帐号:位图位置2】

19 06 20 51 32 00 00 00 02 61 20 :

第2域:变长,LLVAR 标准为19位或22位。(左右对齐方式看银行)

描述:主帐号,唯一的确认一个用户的基本帐号。10字节BCD码表示。

【处理代码:位图位置3】

60 00 00:

第3域:定长,类型N6。3字节BCD码表示。

描述:描述交易对用户帐号造成的影响,[处理代码+信息码]可以唯一定义一种交易类型。

1-2 交易动作码

3-4付出账户类型,用于借记类,如查询,代收费,转场交易

5-6收入账户类型,用于代收费,转账

【交易金额:位图位置4】

 00 00 00 02 00 00 :

第4域:定长,类型N12

描述:账户人要求银行交易的交易金额,不含处理交易费用。

这里金额表示:200.00元

【系统跟踪号:位图位置11】

00 00 73 :

第11域:定长,类型N6,3字节BCD码表示。

描述:终端交易的跟踪号码,对于银行交易系统跟踪号是交易流水号。流水号“000073”

【二道磁道信息:位图位置35】

37 06 20 51 32 00 00 00 02 61 20d1 91 12 01 00 00 00 00 00 :

第35域:变长,格式LLVAR [长度标识一字节]类型:Z..37

描述:写在二磁道的数据,数据组成,数据组成遵循ISO7811-1985标准

后面19字节BCD码表示二磁道数据,为支持国际交换收取单行应将二磁道中的分隔符换为“=”,除此之外不能对二进制数据进行任何修改,如:修改PAN 的校验字,有效期等

【收卡单位终端标识码:位图位置41】

30 30 30 30 31 31 31 31 :

第41域,定长,类型:ANS15

描述:定义在收单单位中定义一个服务端的标识码,在同一个服务终端标识码应唯一。

终端为“00001111”

【收卡商户定义码:位图位置42】

31 30 32 32 35 30 31 35 33 31 3131 31 31 31

第42域,定长,类型:ANS15

描述:在本地或者网络中定义的交易单位的(商户)的编码

商户编码为“102250153111111”

【交易货币代码:位置位置49】

01 56

第49域,定长,类型:AN3

描述:按ISO4217定义的交易货币代码,用来表示“交易金额”(第4域)所用的货币种类

前面补0,用2字节BCD码表示,这里的货币代码为“156”

【IC卡交易的相关数据:位图位置55】

00 44 9f 26 08 92 b6 ae 9a 9b 102e d6 9f 27 01 80 9f 10 13 07 01 01 03 a0 a0 10 01 0a 01 00 00 00 10 37 51 3a22 be :

第55域,变长

描述:IC卡交易相关数据,最大长度255,IC卡数据有自己的定义,格式,所以报文的格式跟他们在PBOC/ITLV(tag+length+value)表示一个数据

00 44 :长度表示44个字节

9f 26 08 b6 ae 9a 9b 10 2e d6 :应用密文

9f 27 01 80:密文信息数据 TLV,b1

9f 10 13 07 0101 03 a0 a0 10 01 0a 01 00 00 00 10 37 51 3a 22 be: 发卡行应用数据(issuer application data), TLV, 变长,最大32字节. b..32.



另外一篇文章是相应处理代码:









原创粉丝点击