如何在EMV非接触式轨迹数据中替换CVC3,ATC和不可预测数字?

3

我正在尝试根据CVC3和一些位置参数组装正确的轨迹数据。但是EMV C-2内核书籍非常晦涩难懂(能不能包含一个例子呢!?!)。有人可以帮助解决这个问题吗:

9f62 - pcvc3(t1)  - Position of CVC3 in track1: 0x38 (4-6?)
9f63 - punatc(t1) - Unpredictable Number Track1 Pos: 0x3C6 (2-3 7-10?)
9f64 - natc(t1)   - Digits in track1 ATC: 4
9f65 - pcvc3(t2)  - Position of CVC3 in track2: 0x38 (4-6)
9f66 - punatc(t2) - Unpredictable Number Track2 Pos: 0x3C6 (2-3 7-10?)
9f67 - Digits in track2 ATC: 4

成功生成校验和后:

9f61 - track2 CVC3 - 2EF4
9f60 - track1 CVC3 - 609B
9f36 - ATC - 1E47

假设自由数据域最初全部为0,它是如何结束的呢?规范说明如下:
将二进制编码的CVC3(Track2)转换为十进制表示中的BCD编码。将BCD编码的CVC3(Track2)的q个最低有效数字复制到轨道2数据的“自由数据”中。资格位置由PCVC3(Track2)中的q个非零位指示。
我的理解是: CVC3 = 0x609B = 24731(因此复制731?BCD与此有什么关系吗?还是他们只是说“将731作为BCD编码复制到字节数组中”?)
1个回答

5

是的,您说得对,这有点晦涩。您需要将p值(pCVC3和PUNATC)转换为二进制。(0011 1000, 0011 1100 0110是您轨道1的p值)然后将正确的值与自由数据右对齐。例子:

Bxxxxxxxxxxxxxxxx^ /^14111014010000000000
             ....000000000000000000CCC000
             ....00000000000000AAAA000UU0

您说您的track 1的CVC3是609B,即24731,由于您的PCVC3仅要求3个字符,因此您会填入731。您的ATC是1E47,即7751。您的PUNATC要求4位数字,因此您会使用7751。如果ATC低于请求的字符,则需要用0进行填充。您的不可预测号码更加棘手......因此,您可以生成一个4字节的随机数。将其转换为uint(十进制),然后将前8个最高有效字节标记为0。例如,假设您的随机4字节是29A6 06AE,以十进制表示为698,746,542。用0标记出前8个字符,剩下的是000,000,002。您会将02放在您不可预测的号码位置上...所以...所有这些说法,你的轨道看起来像这样

Bxxxxxxxxxxxxxxxx^ /^14111014017751731020

最后一个字符与不可预测数字(数字)的位数相等,为02。因此,最后一位是2,生成您的最终追踪数据。

%Bxxxxxxxxxxxxxxxx^ /^1411014017751731022;

track2非常相似。祝你好运。我理解你对此的挫败感。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接