EMV/PBOC之脚本与脚本结果

转载请注明出处

http://blog.csdn.net/pony_maggie/article/details/17681215

作者:小马



先说说脚本的格式,如下图, 此图来自emv规范.

 

脚本一定要是上面图14中的格式, 否则终端无法解析,无法解析也就不会发送脚本到IC卡。 脚本长度最多是128字节,若命令比较多超过此长度,可以用多条脚本发送, 这种时候脚本标识符就要区分开了。不过这种多脚本的情况实际使用很少出现。


终端处理时,会把每条86的命令解析出来直接发给卡片执行,如果卡片执行成功或者警告,终端就继续发送下一个指令。如果执行失败,就不再发送,并设置该条脚本的执行结果。


下面通过实例进一步说明,

71169F180455667788860D8424000008AABBCCDD11223344

解析如下:

71—脚本Tag

16—总长度

9F18—脚本标识符tag,

04—脚本标识符长度

55667788—脚本序列号

86--脚本命令tag

0D—脚本命令长度

8424000008AABBCCDD11223344—脚本命令

 

简单说明一下, 脚本标识符对终端来说的意义就是最终的脚本结果带有标识符,下面会讲到. 86开始就是真正的脚本命令了,一个71或者72,可以带多个86的脚本,比如下面这样的(可以自己解析一下):

 

724E9F180411223344860D8416000008AABBCCDD11223344860D8424000008AABBCCDD112233448609842400000455667788860D8416000008AABBCCDD

11223344860D8416000008AABBCCDD11223344

 

再说说脚本结果. 共有5个字节,

第1 个字节:包含脚本处理结果和脚本处理失败时脚本的命令序号。如果脚本处理成功,这

个序列号为0

第2 至5 字节:包含发卡行脚本中收到的发卡行脚本标识符

 

情况1

如果脚本命令执行成功,脚本结果的第1字节置为‘2x’, x表示脚本序号, 还是上实例,

 

72219F180411223344860D8424000008AABBCCDD112233448609842400000455667788

脚本结果是20 11 22 33 44.

 

再来一个,

71309F180411223344860D8416000008AABBCCDD11223344860D8424000008AABBCCDD1122334486098424000004AABBCCDD72309F180444332211

860D8416000008AABBCCDD11223344860D8424000008AABBCCDD1122334486098424000004AABBCCDD

 

脚本结果是20 11 22 33 44 20 44 33 22 11

注意第二个示例,其实是一个脚本,两组脚本标识.

 

情况2

如果卡片对脚本命令的响应的SW1不为‘90’、‘62’或‘63’,表示命令处理失败,则终端必须置发卡行脚本结果第1字节为’1x’,示例如下:

 

71309F180411223344860D8416000008AABBCCDD11223344860D8424000008AABBCCDD112233448609842400000455667788

这里面有三条86的命令,假设第二条执行失败了, 那么脚本结果是12 11 22 33 44.

 

 

情况3

如果接收到发卡行脚本,但未能正确解包,因而没有向IC卡发送脚本命令,则发卡行脚本结果第1字节置‘00’。

示例1

720D8416000008AABBCCDD11223344

这个脚本格式不符合图14, 解析就会出错,不会发给ic卡, 又没有脚本标识符, 所以脚本结果为00 00 00 00 00.

 

示例2

72169F18041122334486098416000008AABBCCDD11223344

这个脚本也是格式有错,86的长度不对, 但是它有脚本标识, 所以脚本结果为

00 11 22 33 44

 

示例3

71149F1804112233448416000008AABBCCDD1122334472149F1804556677888416000008AABBCCDD11223344

这是有两组脚本标识的情况.脚本结果为

00 11 22 33 44 00 55 66 77 88

阅读更多

更多精彩内容