POS的一点杂笔

仅限于POS

仅限于POS

仅限于POS

A 字母字符
N 数字
S 特殊字符
an 字母和数字字符
as 字母和特殊字符
ns 数字和特殊字符
ans 字母、数字和特殊字符
MM 月份
DD 日期
YY 年份
hh 时
mm 分
ss 秒
LL,LLL 后面所跟的可变字段的长度
VAR 可变长度字段

 

1. 几个数据长度的说明

     LLVAR 该写法表示数据字段包括包括两个子域,第一个子域为2位长(LL),表示其 后所跟数据的长度。第二个子域的长度位LL位。VAR表示子域中的数据部分。 注意整个字段总长度变为LL+2。例如:an..25 LLVAR表示此字段最长可达25 位。实际位数在第一个子域中表示。

  LLLVAR 除长度子域为三以外,含义和LLVAR一样。

数据表示方法 

   所有数据ASCII显示格式表示,字符集合的确定取决于配置情况。
示例:
  ans 5 =”123AB” --> 31 32 33 41 42 (HEXA)
 所有数据类型为 “b”(二进制)的字段按照其十六进制数值显示表示法编码。b8 = 0x34--> 34(HEXA)
 数据中给出的所有长度均表示需要的逻辑位数。示例: n-12=12个数字
 所有类型为n的数字字段在8583报文中将采用BCD压码。 示例: n6=”980812”  98 08 12 (HEXA)
所有类型为n的数字字段的数据在8583报文中均采用右对齐,前面空位补零。示例:长度为3的数据“156”的数据在报文中为: n3=”156” --> 01 56 (HEXA)
在8583报文中,所有类型为LLVAR的字段长度占用一个字节,类型为LLLVAR字段 长度为两个字节
  示例:下面数据的长度分别为8、16、15、15,变长字段的类型分别为LLVAR和LLLVAR。
    ans..16=”1234567A” -->08 31 32 33 34 35 36 37 41 (HEXA)
    n..19=”1234567890123456” --> 10 12 34 56 78 90 12 34 56 (HEXA)
    n..19=”123456789012345” --> 0F 01 23 45 67 89 01 23 45 (HEXA)
    n…999=”123456789012345” --> 00 0F 01 23 45 67 89 01 23 45(HEXA)
所有其它类型的字段,若为固定长度,则采用左对齐,其后空位以空格填充。 示例: ans6=”123AB”--> 31 32 33 41 42 20 (HEXA)
 当某字段表示金额时,格式中不带小数点。示例:23.45---》2345

二、报文解析

  发送的数据包:   009F600015000060310031992208000020000000C0009600009030333030303030314130303435333035343131303030310064303056323031343036313030312020202020202020203030303030303030303046343242434638454437463131333045463432424346384544374631313330450011000000440040003153657175656E6365204E6F31383331333042303230303135323730313636370003303120

  解析如下:

    数据格式 = 长度+TPDU(N5=ID(N1)+目的地址(N2)+源地址(N2))+报文头(总长度12字节,压缩时用BCD码表示为6个字节长度的数值:应用类别(N2)+软件总版本号(N1)+终端状态(N1)+软件分版本号(N6))+应用数据(不定长)

    009F(数据总长度)  如下是318个字节->159个字符->长度是159(10进制)->9F(16进制)->占用两个字节009F

    6000150000(TPDU,不固定,每个银行给的不一样)

      TPDU:传输协议单元  ID:60H 目的地址:00 15 源地址:00 00                     

           603100319922(报文头) 总长度为12字节,压缩时用BCD码表示为6个字节长度的数值。

      报文头说明:应用类别、软件总版本号、终端状态,处理求和软件分版本号(具体指各厂商的程序版本号,另外一说是 保留使用全部填0(注意:此处 具体取值 不同厂家有不同的规范,请不要以此处为准))

      应用类别定义:

        磁条卡金融支付类应用:60  IC卡金融支付类应用   :61 磁条卡增值业务类支付 :62  IC卡增值业务类支付为63

        软件版本号: 10--2001年人民银行POS规范之前版本   11--2001年人民银行POS规范版本  21--2002年银联POS规范版本  22--2004年银联POS规范版本  30--2009年银联POS规范版本 31--2010年银联POS规范版本

              终端状态:0-正常交易状态,1--测试交易状态 

                                                3 软件总版本号30以下的处理要求

 

处理要求编码

处理要求说明

0

无处理要求

1

下传终端磁条卡参数

2

上传终端磁条卡状态信息

3

重新签到

4

通知终端发起更新公钥信息操作

5

下载终端IC卡参数

6

TMS参数下载

7

终端主密钥(明文)下载

D

参数远程更新

l  

4 软件总版本号31以上的处理要求:

处理要求编码

处理要求说明

0

无处理要求

1

下传终端磁条卡参数

2

上传终端磁条卡状态信息

3

重新签到

4

通知终端发起更新公钥信息操作

5

下载终端IC卡参数

6

TMS参数下载

7

BIN黑名单下载

8

币种汇率下载(仅在境外使用)/助弄取款 手续费比率下载(仅在境内使用)

D

参数远程更新

E

终端主密钥(明文)下载

        软件分版本号: 存放软件总版本号和各厂商的程序版本号,长度为6字节。前两字节同软件总版本号,后四字节由厂商自行定义。

     那么603100319922就可以解析为 60(IC卡金融支付类应用) 31(2010年银联POS规范版本) 0(正常交易状态)0(无处理要求)  31(同软件总版本号) 9922(厂商自定义)

 应用数据:  

    应用数据= 消息类型+位元表+ 位元(详细情况请参见 各个厂商具体的报文定义)         

60001500006031003199220800 0020000000C0009600008930333030303030314130303435333035343131303030310064303056323031343036313030312020202020202020203030303030303030303046343242434638454437463131333045463432424346384544374631313330450011000000470040003153657175656E6365204E6F31383331333042303230303135323730313636370003303120

分析位图:

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

现在进入关键的位图分析,现在我们取到了表示位图的8个字节即00 20 00 00 00 C0 00 96,转为二进制为

00000000 00100000 00000000 00000000 00000000  11000000 00000000 10010110

位图中为1的位置即代表相应的域,在上面的二进制位中从左往右 第11位、第41位、第42位、第57位、第60位、第62位、第63位

域长度说明

N: 数字,有几位就是几位

字符 含义 
a 字母字符,A至Z,a至z,向左靠,右边多余位填空格 b 数据的二进制表示,后跟数字表示位(bit)的个数 
B 用于表示变长的二进制数,后跟数字表示二进制数据所占字节(Byte)的个数 n 数值,0至9,右靠,首位有效数字前填零。若表示人民币金额,则最右二位为角、分 p 填充字符,如空格 s 特殊符号 
an 字母和数字字符,左靠,右边多余位填空格 as 字母和特殊字符,左靠,右边多余位填空格 cn 压缩数字码,即BCD码 
ns 数字和特殊字符,左靠,右边多余位填空格 ans 字母、数字和特殊字符,左靠,右边多余位填空格 
ansb 字母、数字、特殊字符和二进制数,左靠,右边多余位填空格 MM 月份,01至12 DD 日期,01至31 YY 年份,00至99 hh 时,00至23 mm 分,00至59 ss 秒,00至59 
LL 后面跟随数据元的可变长度值,01至99 LLL 后面跟随数据元的可变长度值,001至999 VAR 可变长度数据元 3 3字符的固定长度 
..17 最大17个字符的可变长度。所有可变长度字段在数据元的前面应另外包含2个或3个位置, 以表示后面到数据元结束时的位置数。 
X 借贷符号,贷记为“C”,借记为“D”,并且总是与一个数字型金额数据元相连,例如, 净对账金额中X+N16含义为前缀“C”或“D”和净对账金额的16位数字。 

Z ISO 4909和ISO 7813中定义的磁卡第二、三磁道的代码集 

000089  受卡方系统跟踪号  N6 第11域

3033303030303031 终端代码(ANS8 ASCII码,41域)----》03000001 

413030343533303534313130303031 商户代码(ANS15),42域 -->A00453054110001 

第57域 LLLV 代表的,上送的一个特定信息,这个看厂商是否要求上送,

0064(长度) 30305632303134303631303031202020202020202020303030303030303030304634324243463845443746313133304546343242434638454437463131333045

LLLV代表的 60域(n...017),

0011(长度) 00 000047 004 0(如果为N定长,则左补0,现在为不定长,右补0)

62域  这里厂家规定为 62域的第19种用法  http://blog.csdn.net/nocodelife/article/details/8243146

0031 53657175656E6365204E6F3138333133304230323030313532373031363637

63域,自定义域的操作员代码 LLLVAR   0003 303120 (代表操作员为01+空格)

电子签名上送分析

 

[用户信息]: 【发送包】 :
01DE
6000150000
60 31 00 319922
0820
位元表 5022000008C00215
主账号LLVAR 18 622908363811192018
交易金额000000000001
受卡方系统跟踪号000480
清算日期 0909
检索参考号 303934363537303530313736
受卡机终端标识码 3839303030313632
受卡方标识码 303831343533303934393930303035
签购单域 LLLVAR ans..700
0194
(050)FF000CC4B2CFFEB8D5B8F6CCE5BBA7FF0104CFFBB7D1FF020101FF040B3033303930303030202020FF030B31323334353637
(100)38202020FF060720160908094658FF0706303030303030FF0A03313536FF300A50424F43204445424954FF310A50424F4320
(150)4445424954FF2208A000000333010101FF230830552BF91F7B1CD4FF403C2020202020202020202020202020202020202020
(194)2020202020202020202020202020202020202020CAD5B5A5BFCDB7FE3430302D363234332D383838FF700102
自定义60域
0012(长度)
07(规定填07) 000004(批次号) 800(网络管理信息码)

9(电子签字域--62域)
0187
00000100000000F00000002A000000020000031CFF02FF02FF02FF02FF02EAEC291589422FB90EA14FF9CC619EA85B34FF02
2F8B834BEA42CAB870DEBBCBFE7A8980FF021E358F2FBB64D594E040F420E882F8FF020CA86195753FED3C4FAC8228FF0257
00628D78DE295865D6FD7680FF020154C0A1ED1B8DA9C0FF026938D3EC4457DE53F5AB48FF023009F0E8A464439C6F905C29
B0FF026B75395F47243D
CF6F80FF02641940FF02
1EA0FF021550FF02F0FF
02FF02FF02FF02
(MAC域)3934433142324338

批上送交易明细分析

发送包004F600015000060310031992203200020000000C1001000005630333030303030314130303435333035343131303030310042010000004506222600640011693463000000000001001400000075201501

004F  (数据总长度)  如下是158个字节->79个字符->长度是79(10进制)->4F(16进制)->占用两个字节004F

6000150000 (TPDU,不固定,每个银行给的不一样)

60 31 00 319922(报文头) 60(IC卡金融支付类应用) 31(2010年银联POS规范版本) 0(正常交易状态)0(无处理要求)  31(同软件总版本号) 9922(厂商自定义)

0320 (批上送金融交易)

00 20000000C10010(位图域)

分析位图:

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

现在进入关键的位图分析,现在我们取到了表示位图的8个字节即00 20 00 00 00 C0 00 96,转为二进制为

00000000 00100000 00000000 00000000 00000000  11000001 00000000 00010000

位图中为1的位置即代表相应的域,在上面的二进制位中从左往右 第11位、第41位、第42位、第48位、第60位,也就是说上送的位图是11,41,42,48,60域,然后,我们再来参照<POS终端应用规范V1.1>

来 每个域进行解析

000056,11域,流水号 N6

3033303030303031,41域,终端标识码,AN8 030000001

413030343533303534313130303031,42域,受卡方标识码(商户号)A00453054110001

0042 010000004506222600640011693463000000000001

48域,LLLV。。。62格式,根据《中国银联POS终端规范》

0042代表长度,右靠BCD码表示2个字节的长度 + 左靠BCD码表示最大161个字节的数据,这里采用的是用法二。磁条卡交易明细 

0042,右靠BCD码的长度

01(交易笔数)(交易明细1的详细记录)00(内卡交易)000045(原交易的POS流水号)06222600640011693463(卡号,右对齐,左补0)000000000001(交易金额,代表 0.01元)

0014 00 000075 201 501,60域数据

0014(长度LLLV格式,2个字节,同上)00 (交易批次号)000075(批次号) 201(网络信息管理码)5(终端读取能力)0(未使用或后续子域存在)1(支持部分扣款和返回余额标志)

关于60域的用法以 http://blog.csdn.net/nocodelife/article/details/8243497

 

posted @ 2016-09-08 14:50  疯封风  阅读(761)  评论(0编辑  收藏  举报