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

来源:互联网 发布:php 输出正三角形 编辑:程序博客网 时间:2024/06/05 13:34


一般指令有两种类型:

第一种:TPDU、报文头和应用数据三个部分。

第二种:只有应用数据部分。

 

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

60 00 02 00 00 61 32 00 32 00 03 02 00 7024 06 C0 20 C2 9A 31 19 62 17 85 20 00 01 68 90 24 90 00 00 00 00 00 00 00 0123 00 01 68 27 06 05 10 00 01 00 12 37 62 17 85 20 00 01 68 90 24 9D 27 06 2201 00 00 06 10 00 31 32 33 34 36 31 33 36 31 32 33 34 35 36 37 38 39 30 32 3132 34 32 00 04 F1 02 60 00 31 35 36 0F D0 4E 2A 00 2D 88 27 26 00 00 00 00 0000 00 01 64 9F 26 08 45 08 1B B0 83 E7 9B F3 9F 27 01 80 9F 10 13 07 0F 01 03 A020 02 01 0A 01 00 00 00 00 00 51 68 C3 6A 9F 37 04 F6 44 80 12 9F 36 02 00 0395 05 00 80 04 E0 00 9A 03 17 08 25 9C 01 00 9F 02 06 00 00 00 00 01 23 5F 2A02 01 56 82 02 7C 00 9F 1A 02 01 56 9F 03 06 00 00 00 00 00 00 9F 33 03 E0 E1C8 9F 34 03 02 03 00 9F 35 01 22 9F 1E 08 20 20 20 20 20 20 20 20 84 08 A0 0000 03 33 01 01 01 9F 09 02 00 20 9F 41 04 00 00 01 68 9F 63 10 30 31 30 34 3538 34 30 00 00 00 00 00 00 60 00 00 30 41 32 30 32 35 30 31 30 30 32 30 32 3032 30 30 30 30 35 30 30 38 33 32 30 30 30 33 20 20 00 14 22 00 00 01 00 06 0141 30 31 45 33 38 43 33

第一步

POS终端上送POS中心的消息报文结构包括TPDU、报文头和应用数据三部分:

——TPDU说明:长度为10个字节,压缩时用BCD码表示为5个字节长度的数值。

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

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

所以上述报文中前五个字节为TPDU,即60 00 02 00 00

报文头占用六个字节,即61 32 00 32 00 03

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

——0200金融类请求消息:

●  POS查询请求。

●  POS消费请求。

●  POS消费撤销请求。

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

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

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

●  分期付款消费请求。

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

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

●  磁条卡现金充值请求。

分析位图:

 

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

 

现在进入关键的位图分析,现在我们取到了表示位图的8个字节即70 24 06 C0 20 C2 9A 31,转为二进制为

 

01110000 00100100 00000110 11000000 0010000011000010 10011010 00110001

 

位图中为1的位置即代表相应的域,在上面的二进制位中从左往右有第2位、第3位、第11位、第14位、第22位、第23位、第25位、第26位、第35位、第41位、第42位、第47位、第49位、第52位、第53位、第55位、第59位、第60位、第64位。

 

下面开始这些域中的数据:

首先分析2域,为主账号,压缩时用BCD码表示的1个字节长度值+用左靠BCD码表示的最大10字节的主账号。长度区: 19  数据区:62178520000168902490

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

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

11域为受卡系统跟踪号(流水号/凭证号),压缩时用BCD码表示的3个字节的定长域,即:000168

14域为卡的有效期,压缩时用BCD码表示的2个字节的定长域,即:2706,表示卡有效期,YYMM2027/06

22域为服务点输入方式码,压缩时用右靠BCD码表示的2个字节的定长域,即051005-集成电路卡 1-交易中包含PIN

23域为卡序列号,压缩时用右靠BCD码表示的2个字节的定长域(注:只有在IC卡交易时使用),即:0001

25域为服务点条件码,压缩时用左靠BCD码表示的1个字节的定长域,即:0000-正常提交。

26域为服务点PIN获取码,压缩时用BCD码表示1个字节的定长域,即:12

35域为2磁道数据,压缩时用BCD码表示的1个字节的长度值+用左靠BCD码表示的最大19个字节的第二磁道数据,即:长度区: 37数据区:6217852000016890249D270622010000061000

41域为受卡机终端标识码,ANS8 8个字节定长域,此处用ASCII码表示,即12346136

42域为受卡方标识码,ANS1515个字节的定长域,即:123456789021242

47域为营销信息域,该域是一个变长域(LLLVAR),最长可达999个字节,最开始是一个占3个字节的长度值信息。压缩时采用右靠BCD码表示长度信息,长度信息占两个字节。收单平台应仅对上送47域的终端返回47域应答信息,避免存量不支持47域终端无法解包47域,导致终端交易失败。即:长度区:00 04 数据区: F1 02 60 00

52域为个人标识码数据,B648个字节的定长二进制数域(注:若域22指明有PIN输入,则本域必须出现,客户的个人标识码(PIN)必须加密后存放在此域中,PIN的格式在域53中注明,本系统允许的PIN长度最大为12位数字。

即:0FD04E2A002D8827

53域为安全控制信息,N1616个字节的定长数字字符域,压缩时用BCD码表示的8个字节长的定长域(在交易类消息中,该域用于标识PIN和磁道信息加密的类型)。

即:2600000000000000

55域为IC卡数据域,该域是一个变长域(LLLVAR),最长可达255个字节,最开始是一个占3个字节的长度值信息。压缩时采用右靠BCD码表示长度信息,长度信息占两个字节。

长度区: 0164 数据区:(解析完的TLV数据区)

9F26:08 45 08 1B B0 83 E7 9B F3

9F27:01 80

9F10:13 07 0F 01 03 A0 20 02 01 0A 01 00 0000 00 00 51 68 C3 6A

9F37:04 F6 44 80 12

9F 36: 02 00 03

95:05 00 80 04 E0 00

9A:03 17 08 25

9C :01 00

9F 02:06 00 00 00 00 01 23

5F 2A:02 01 56

82:02 7C 00

9F1A:02 01 56

9F03:06 00 00 00 00 00 00

9F33:03 E0 E1 C8

9F34:03 02 03 00

9F35:01 22

9F1E:08 20 20 20 20 20 20 20 20

84:08 A0 00 00 03 33 01 01 01

9F09:02 00 20

9F41:04 00 00 01 68

9F63:10 30 31 30 34 35 38 34 30 00 00 00 0000 00 60 00 00

第一位都代表后面的字节数,如9F63:10 30 31 30 34 35 38 34 30 00 00 00 00 00 00 60 00 00

10转换成0001 0000后在转化成二进制为2^4=16个字节,即后面取16个字节长度的数据。

59域为自定义域,该域是一个变长域(LLLVAR),最长可达999字节,最开始是一个占3个字节的长度值信息。压缩时采用右靠BCD码表示长度信息,长度信息占两个字节。

本域采用TLVtag-length-value)的表示方式,即每个子域由tag标签(T),子域取值的长度(L)和子域取值(V)构成。其中tag标签数据属性为an2,子域长度数据属性为n3,子域取值数据属性根据子域属性确定。

即:长度区:00 30数据区:41 32 30 32 35 30 31 30 30 32 30 32 30 32 30 30 30 30 35 30 30 38 3332 30 30 30 33 20 20

60域为自定义域,压缩时用右靠BCD码表示的2个字节的长度值+用左靠BCD码表示的最大9个字节的数据,即:长度区: 0014  数据区22 00 00 0100 06 01

64域为报文鉴别码,8个字节的定长域,报文来源正确性鉴别码是对消息中的某些敏感域的数据计算MAC值。当交易消息被发送者发出之前,应由发送者产生MAC;接收者收到消息后,将重新计算MAC值,以鉴别消息在传送途中是否被篡改。

即:4130314533384333

 

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

2

02 00 70 20 0000 20 C0 82 00 19 06 20 51 3200 00 00 02 61 20 60 00 00 00 00 00 02 00 00 0000 73 37 06 20 51 32 00 00 00 0261 20 d1 91 12 01 00 00 00 00 00 30 30 30 3031 31 31 31 31 30 32 32 35 30 31 3533 31 31 31 31 31 31 01 56 00 44 9f 26 0892 b6 ae 9a 9b 10 2e d6 9f 27 01 80 9f10 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 00000000 0010 0000 1100 0000 1000 0010 0000 0000

指示哪些域存在,容易计算下面几个域存在:2,3,4,11,3541,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域:定长,类型N63字节BCD码表示。

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

1-2交易动作码

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

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

【交易金额:位图位置4

 00 00 00 02 00 00 

4域:定长,类型N12

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

这里金额表示:200.00

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

00 00 73

11域:定长,类型N63字节BCD码表示。

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

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

37 06 20 51 32 00 00 00 02 61 20d1 91 12 0100 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 2701 80 9f 10 13 07 01 01 03 a0 a0 10 01 0a 01 00 00 00 10 37 51 3a22 be

55域,变长

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

00 44:长度表示44个字节

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

9f 27 01 80:密文信息数据 TLVb1

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

 

原创粉丝点击