我正在开发一个支持EMV卡的POS应用程序。我能够在TLV中从Verifone MX读卡器读取卡数据,但我面临着将TLV数据解码为可读数据的问题。
我可以将数据分割成TLV标签和它的值。结果值是十六进制的,而不是解码文本。
示例:
这是一个TLV数据示例(我获得了此TLV数据示例here
6F2F840E325041592E5359532E4444463031A51DBF0C1A61184F07A0000000031010500A564953412044454249548701019000
当我在TLVUtil中检查这个TLV时,我会以可读格式获得某些标签中的数据(如这里的标签50)。
在我的应用程序中,我能得到的最接近的信息是:
Tag Value
50 56495341204445424954
4F A0000000031010
61 4F07A0000000031010500A56495341204445424954870101
6F 840E325041592E5359532E4444463031A51DBF0C1A61184F07A0000000031010500A56495341204445424954870101
84 325041592E5359532E4444463031
87 1
90
A5 BF0C1A61184F07A0000000031010500A56495341204445424954870101
BF0C 61184F07A0000000031010500A56495341204445424954870101
我想知道是否有任何方法来识别需要从十六进制转换为字符串的特定标记,或者.Net中是否有任何TLV解析器和解码器可以复制TLVUtil工具。
5条答案
按热度按时间rekjcdws1#
EMV标签的完整列表,可在EMVCo 4.3规范手册3中找到-您可以从此处下载-https://www.emvco.com/download_agreement.aspx?id=654数据表示方式因字段而异。检查“附录A -数据元素字典”
有关编码的详细信息,请参见第4.3节
阅读这两个部分,你的问题就解决了。
ej83mcc02#
只有少数标签需要转换为字符串。一般来说,放在POS屏幕上的标签是用可读字符串的十六进制等效值个性化的。
*5F20:持卡人姓名
*50:应用标签。
*5F2D:语言首选项
您必须知道哪些标记可以转换。
1mrurvl13#
在我看来,通过编程你可以识别出类似的东西,
标签为一个字节(5A - Pan编号)或包含2个字节(5 F20-保持器名称),以及
长度为1字节或2字节,且
标签是primitiv或构造.更多,您可以阅读Here
如果你知道这个列表,你可以得到一些有用的Here,它定义了你正在寻找的标记格式.
在这里,您可以硬编码格式,因为它是很好的定义。
希望有帮助。
tjjdgumg4#
以6F开头的数据是SELECT命令后EMV卡响应的文件控制信息(FCI)。本视频中有一个示例也进行了解码和解释。https://youtu.be/iWg8EBhsfjY
很容易检查出来
hvvq6cgz5#
虽然最初的答案没有指定特定的编程语言,但我根据ISO/IEC 7816-6规范创建了一个“Interindustry数据元素”列表,作为C#枚举,并带有适当的描述和注解。
https://gist.github.com/graealex/39f9f5a801f9beb127d43013aa85abbe