2013-05-04 25 views
5

我正在寻找一种方式来翻译与Java的EMV响应像本次网上选项:EMV TLV JAVA功能

http://www.emvlab.org/tlvutils/

,你把这样的EMV响应:

6f3a8407a0000000031010a52f500b56495341204352454449548701015f2d086573656e707466729f12074352454449544f9f1101019f38039f1a02

它会向你展示完美的一切,我开始自己做一些事情,但后来我意识到,也许我们会ld有两个9F38(PDOL)字符串不是必须的两个相同的标签cuz我知道这是不可能的,但也许标签的值在9F结束,并且下一个标签的开始将是38,那会给我一个错误...现在,我提到它,这可能吗?因为这是我停止做我自己的功能的主要原因之一..

你们有没有写过一个函数来做到这一点?

谢谢!

回答

7

https://github.com/binaryfoo/emv-bertlv应该做的伎俩。

使用你的榜样,下面的代码:

List<DecodedData> decoded = new RootDecoder().decode("6f3a8407a0000000031010a52f500b56495341204352454449548701015f2d086573656e707466729f12074352454449544f9f1101019f38039f1a02", "EMV", "constructed"); 
new DecodedWriter(System.out).write(decoded, ""); 

将输出:

[6F (FCI template)] 8407A0000000031010A52F500B56495341204352454449548701015F...1A02 
[84 (dedicated file name)] A0000000031010 
[A5 (FCI proprietary template)] 500B56495341204352454449548701015F2D086573656E707466729F...1A02 
    [50 (application label)] VISA CREDIT 
    [87 (application priority indicator)] 01 
    [5F2D (language preference)] esenptfr 
    [9F12 (application preferred name)] CREDITO 
    [9F11 (issuer code table index)] 01 
    [9F38 (PDOL - Processing data object list)] 9F1A02 
    9F1A (terminal country code) 2 bytes 
+0

无法使用以下代码进行解码。 – 2016-01-14 10:44:33

0

你是在正确的轨道上。您可以使用技术调用TLV(标记长度值)轻松构建自己的EMV分析器。你的原始数据总是带有一个标签,然后在标签是长度后,使用长度可以得到你的价值。

因此,创建三个方法

方法1:包含所有的短标签 方法2:包含所有长标签 方法3:包含所有的专有标签

所以,当你在你的原始EMV传递标签:

6f3a8407a0000000031010a52f500b56495341204352454449548701015f2d086573656e707466729f12074352454449544f9f1101019f38039f1a02

遍历所有那些牛逼三种方法,它会给你所有你需要的好信息。