我正在开发支持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
我想知道是否有任何方法可以识别需要从Hex转换为字符串的某些标记,或者.Net中是否有可以复制TLVUtil工具的TLV解析器和解码器。
答案 0 :(得分:5)
Complete list of EMV tags and are available in EMVCo 4.3 specification book 3 - you can download from here - https://www.emvco.com/download_agreement.aspx?id=654 How data is represented differs from field to field. Check Annex A Data Elements Dictionary Details on encoding is mentioned in section 4.3 Read both the sections and your problem solved.
答案 1 :(得分:1)
只有少数标签需要转换为字符串。通常放在POS屏幕上的标签,以十六进制等效的可读字符串进行个性化。
5F20 :持卡人姓名
50 :申请标签。
5F2D :语言偏好
您必须知道可以转换哪些标签。
答案 2 :(得分:0)
在我看来,通过编程方式,您可以识别出类似的内容,
标签是一个字节(5A - Pan编号)或它包含2个字节(5F20 - CARD HOLDER NAME),AND
长度为1字节或2字节AND
标签是原始的或构造的。您可以阅读更多内容Here
如果您知道列表,则可以获得有用的内容Here,它会定义您要查找的标记格式。
在这里,您可以对格式进行硬编码,因为它的定义很明确。
希望它有所帮助。
答案 3 :(得分:0)
使用6F的数据开始是在SELECT命令之后由EMV卡响应的文件控制信息(FCI)。这个视频中有一个例子也被解码和解释。 https://youtu.be/iWg8EBhsfjY
很容易检查出来