我正在寻找一种用Java翻译EMV响应的方法,就像这个在线选项:
http://www.emvlab.org/tlvutils/
您可以将类似EMV响应的内容放在其中:
6f3a8407a0000000031010a52f500b56495341204352454449548701015f2d086573656e707466729f12074352454449544f9f1101019f38039f1a02
它将完美地向你展示一切,我开始自己做一些事情,但后来我意识到也许我们可以有两个9F38(PDOL)字符串,而不是两个相同的标记,因为我知道这是不可能的,但也许一个标记的值以9F结束,下一个标记的开始将是38,这会给我一个错误…既然我提到了,这是可能的吗?因为这是我停止执行自己的功能的主要原因之一。
你们中有没有人已经写了一个函数来做这件事?
谢谢!
发布于 2014-11-07 20:44:58
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发布于 2013-12-18 19:04:02
此项目包含用于处理EMV数据http://code.google.com/p/javaemvreader/的代码
发布于 2017-03-01 15:08:47
你在正确的轨道上。您可以使用称为TLV (Tag Length Value)的技术轻松构建自己的EMV解析器。你的原始数据总是返回一个标签,然后在标签是长度之后,使用长度可以得到值。
因此创建三个方法
方法1:包含所有短标签方法2:包含所有长标签方法3:包含所有专有标签
因此,当您传入原始emv标记时:
6f3a8407a0000000031010a52f500b56495341204352454449548701015f2d086573656e707466729f12074352454449544f9f1101019f38039f1a02
遍历所有这三个方法,它将为您提供所需的所有有用信息。
https://stackoverflow.com/questions/16369452
复制相似问题