3

CVC3 と一連の位置パラメーターを指定して、適切なトラック データを組み立てようとしています。しかし、EMV C-2 Kernel の本は、想像できるほど鈍いものです (例を含めることで誰かを殺すことになるでしょうか!?!)。誰でもこの例の作業を手伝ってもらえますか:

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 (トラック 2) を、基数 10 で表される対応する数値の BCD エンコードに変換します。トラック 2 データの「任意データ」の適切な位置に、BCD エンコードされた CVC3 (トラック 2) の q 個の最下位桁をコピーします。適格な位置は、PCVC3(Track2) のゼロ以外の q ビットによって示されます。

私はそれを次のように読みました: CVC3 = 0x609B = 24731 (だから 731 をコピー?

4

1 に答える 1

5

はい、あなたは正しいです。それはかなり鈍いです。p値(pCVC3、およびPUNATC)をバイナリに変換することは正しいです。(track1 p 値の場合は 0011 1000、0011 1100 0110)、適切な値を任意のデータに右揃えします。例

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

トラック 1 の CVC3 は 609B、つまり 24,731 であると言います。これは、PCVC3 が 731 を設定した 3 文字のみを要求しているためです。ATC は 1E47、つまり 7,751 です。PUNATC は 4 桁を要求しているので、7751 を使用します。参考までに、ATC が要求された文字よりも小さい場合は、0 をパディングします。あなたの予測不可能な数はさらにトリッキーです...そのため、4 バイトの乱数を作成します。uint (基数 10) に変換してから、最上位 8 バイトを 0 としてマークします。ランダムな 4 バイトが 29A6 06AE だとしましょう。基数 10 で、698,746,542 です。最初の 8 文字を 0 でマークすると、000,000,002 が残ります。予測不可能な数字の配置のために02を配置する..だから..あなたのトラックがこのようになると言ったすべて

Bxxxxxxxxxxxxxxxx^ /^14111014017751731020

最後の文字は、予測不可能な数 (数値) の桁の長さと同じです。これは 02 だったので、最後の桁は 2 で、最終的なトラック データを作成します

%Bxxxxxxxxxxxxxxxx^ /^1411014017751731022;

track2 は非常によく似ています。頑張ってください。これに対するあなたの不満は理解できます。:)

于 2014-09-24T18:49:55.213 に答える