我想解析TLV字符串并在提供标签值时获取值。
示例:
000201021642333310011114235204546757034445802IN5910我的 公司6005Vegas6304bb02
根据TLV规则,标记52将给出值5467,57将为333。
答案 0 :(得分:1)
这不是EMV使用的BER-TLV编码示例。您的数据示例将“标记值”表示为String / ASCII而不是Binary。
因此,您需要自己的数据解析器,其中:
与真正的BER TLV相比,这种格式更简单,但是您需要开发自己的功能。
拆分的结果将是:
000201 // some header
02 16 4233331001111423
52 04 5467
57 03 444
58 02 IN
59 10 My Company
60 05 Vegas
63 04 bb02
答案 1 :(得分:1)
Stream<Dish>
答案 2 :(得分:1)
例如,基于手动EMVco解析,我有一个QR内容(QR Indonesia Standard):00020101021226680016ID.CO.TELKOM.WWW011893600898025599662702150001952559966270303UMI51440014ID.CO.QRIS.WWW0215ID10200211817450303UMI520457325303360540825578.005502015802ID5916InterActive Corp6013KOTA SURABAYA61056013662130509413255111630439B7
,因此我们可以像这样解析它:
var qris = '00020101021226680016ID.CO.TELKOM.WWW011893600898025599662702150001952559966270303UMI51440014ID.CO.QRIS.WWW0215ID10200211817450303UMI520457325303360540825578.005502015802ID5916InterActive Corp6013KOTA SURABAYA61056013662130509413255111630439B7'
var tags = [];
var i = 0;
while (i < qris.length) {
var tag = qris.substring(i, i + 2);
i += 2;
var valueLength = Number(qris.substring(i, i + 2));
i += 2;
var value = qris.substring(i, i + valueLength);
i += valueLength;
tags.push({tag: tag, length: valueLength, value: value});
}
console.log(tags)
结果将是一个对象数组,如下所示:
[
{ tag: '00', length: 2, value: '01' },
{ tag: '01', length: 2, value: '12' },
{
tag: '26',
length: 68,
value: '0016ID.CO.TELKOM.WWW011893600898025599662702150001952559966270303UMI'
},
{
tag: '51',
length: 44,
value: '0014ID.CO.QRIS.WWW0215ID10200211817450303UMI'
},
{ tag: '52', length: 4, value: '5732' },
{ tag: '53', length: 3, value: '360' },
{ tag: '54', length: 8, value: '25578.00' },
{ tag: '55', length: 2, value: '01' },
{ tag: '58', length: 2, value: 'ID' },
{ tag: '59', length: 16, value: 'InterActive Corp' },
{ tag: '60', length: 13, value: 'KOTA SURABAYA' },
{ tag: '61', length: 5, value: '60136' },
{ tag: '62', length: 13, value: '0509413255111' },
{ tag: '63', length: 4, value: '39B7' }
]