2013-05-04 26 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

遍歷所有那些牛逼三種方法,它會給你所有你需要的好信息。