2013-05-04 12 views
5

Sto cercando un modo di tradurre una risposta EMV con Java come con questa opzione online:EMV TLV Java Funzione

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

dove si mette qualcosa di simile a questa risposta EMV:

6f3a8407a0000000031010a52f500b56495341204352454449548701015f2d086573656e707466729f12074352454449544f9f1101019f38039f1a02

e ti mostrerà tutto perfettamente, ho iniziato a fare qualcosa da solo ma poi mi rendo conto che forse Ho due stringhe 9F38 (PDOL) non necessarie due stessi tag perchè so che è impossibile ma forse il valore di un tag termina in 9F e l'inizio del tag successivo sarebbe 38 e questo mi darebbe un errore ... Ora che Lo dico, è possibile? perché è stato uno dei motivi principali per cui ho smesso di svolgere la mia funzione ..

Qualcuno di voi ha già scritto una funzione per farlo?

Grazie!

risposta

7

https://github.com/binaryfoo/emv-bertlv dovrebbe fare il trucco.

Usando il tuo esempio, il seguente codice:

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

uscita sarà:

[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

Impossibile decodificare utilizzando il seguente codice. –

0

Siete sulla strada giusta. Puoi facilmente creare il tuo parser EMV usando la tecnica chiamata TLV (Tag Length Value). I tuoi dati grezzi tornano sempre con un tag, quindi dopo che il tag è la lunghezza, utilizzando la lunghezza puoi ottenere il valore.

Quindi creare tre metodi

Metodo 1: Contiene tutti i tag brevi Metodo 2: Contiene tutti i lunghi tag Metodo 3: contiene tutti i tag proprietari

Così, quando si passa nella vostra EMV grezzo tag:

6f3a8407a0000000031010a52f500b56495341204352454449548701015f2d086573656e707466729f12074352454449544f9f1101019f38039f1a02

loop attraverso tutti coloro t hree metodi, ti fornirà tutte le informazioni di cui hai bisogno.