最近因研究了下银联借记/贷记应用卡片规范,发现网上可参考资源较少,于是萌生了写下这篇文字的想法,希望可以帮助到有需要的兄弟姐妹,有描述不清晰或者有错误的地方欢迎指正。
下面进入正题,测试使用的卡是招商银行的IC卡:
(一)应用选择
一张银联IC卡里面可能有多个应用,所谓应用就是卡片和终端之间的应用协议和相关的数据集,读卡器和卡的交互其实就是和应用的交互,卡的交易其实就是选择某个应用做交易。但目前卡商所生产的卡基本上都是一个应用,即便如此,但根据银联的规范,应用选择这个步骤也是必不可少的。
(1)首先是选择PSE文件1PAY.SYS.DDF01 ,使用的命令是select命令,这个命令的详解在JR/T 0025.5的附录B中有详细的介绍。
此处请求命令报文如下:00A404000E315041592E5359532E4444463031
卡片会返回:6F1E840E315041592E5359532E4444463031A50C5F2D027A689F1101018801019000
此处返回的结果是严格按照TLV格式来的,解析TLV格式的源程序我会在后续的文章中给出。此处解析出来的数据如下:
6F:FCI模板
84:DF名称
A5:FCI专用模板
88:目录基本文件的SFI (高三位为0,后面补100,进行读取文件数据)
5F2D:首选语言
9F11:发卡行代码表索引
BF0C:发卡行自定义数据--(该卡没有带此数据)
FCI(文件控制信息)包含FCI(短文件标识符),目录中的每个应用列出一个应用。
(2)会根据SFI 进行读记录,此处SFI为01,根据read record的规范,p2的高5位为SFI,低三位为100,故p2的值为0x0C。
此处请求命令报文为:00B2010C00
卡片返回:702861264F08A000000333010101500A50424F432044454249549F120A50424F432044454249548701019000
此处的返回结果也是按照TLV格式来编码的,解析后为:
4F : A000000333010101 应用标识符(AID)
50:50424F43204445424954 应用标签