2011-06-28 25 views
14

私はVISAカードからクレジットカードのデータを読み込もうとしていますが、成功することができませんでした。インターネットリソースとして、私はマスターカード1PAY.SYS.DDF01ファイルを使用してPSEディレクトリを開き、レコードを読み取ります。しかし、VISAでは必須ではなく、PSEディレクトリを取得するためにSELECTコマンドを使用して次のファイルを使用すると、そのファイルシステムでサポートされていないことを意味する '6A82'という応答が返されます。私はEMV 4.2 Book 1(EMV仕様)のErrorを探しました。そして、それは "List of AIDs"を使わなければならないと言います。 「端末がそのリストの次のAIDを使用して別のSELECTコマンドを発行する」と表示されます。 これを理解できず、さらに進めません。EMVベースのスマートなビザカードの詳細を読み取る方法

VISAカードまたはAIDのPSEを取得してクレジットカードの詳細を取得する方法についてのヘルプがありますか?

おかげで、 シェカール

答えて

3

だから、問題はあなたがカード上のアプリケーションのAIDを知らないのですか? PSE以外の方法はありません。あなたがサポートしているカード上のアプリケーションをまず知っておく必要があります。したがって、「AIDのリスト」は、あなたがサポートしているAIDのリストです。あなたはここにリストアップしたいくつかの標準AIDに基づいてこのリストを作成しようとすることができます:http://en.wikipedia.org/wiki/EMV#Application_selection

1

私の研究は、私にとっては奇妙なことです...私の研究は、VISAのためにアプリケーションは常に利用可能であるが、

//    OP CL P1 P2 LN DATA------------------------------------- EL 
//select command 00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00 

NSString* str= @"1PAY.SYS.DDF01"; 
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding]; 
int datalength = data.length; 
NSMutableData *selectPSECommand = [[NSMutableData alloc] init]; 

[selectPSECommand appendBytes:"\x00" length:1]; //command class 
[selectPSECommand appendBytes:"\xA4" length:1]; //APDU_INSTRUCTION_SELECT_FILE 
[selectPSECommand appendBytes:"\x04" length:1]; //select file by name 
[selectPSECommand appendBytes:"\x00" length:1]; //First or only occurrence of file 
[selectPSECommand appendBytes:&datalength length:1]; //data length 
[selectPSECommand appendData:data]; //the data we are sending 
[selectPSECommand appendBytes:"\x00" length:1]; //expected response length. here it is 0. We are only selecting a file. 

コードサンプルはC.

は、データを比較目的のためである:それは私が順序どおり私のカードリーダに送るコマンドは、そのアプリケーションを選択する。ここで、とにかく...

必須ではありませんあなたはセン私が送信しているデータとdが一致するかどうかを確認します。その間、私はAIDのリストを調べることに目を向けるでしょう。

希望します。 Ezfrag

6

まず、PPSEアプレットは、VISAやMasterCardに特有のものではありません。これはEMVによって定義され、使用可能な支払いアプリケーションのAIDをカードに記載することに気付いたときに使用されます。しかし、端末がなければ、端末は候補リストを構築するために、サポートされているすべてのAIDを試してみる。

VISAアプレットを選択したいが、完全なAIDがわからない場合は、部分選択を使用することができます。すべてのVISAエイズのでVISAのRIDで始まる:A0 00 00 00 03.このコマンドを送信しようとすることができます

これは、最初のインスタンスを返します。

00 A4 04 00 05 A0 00 00 00 03 00

、あなたのカードにしている場合、これはより多くのあなたを与えるだろう。

00 A4 04 02 05 A0 00 00 00 03 00

+0

@KamKamen Goranchevあなたは上記のコマンドに対応するAPDUを知っていますか? – nish1013

+1

指定されたRIDを持つアプリケーションがある場合、応答はステータスワード61XXになります。その場合は、GET RESPONSEコマンドを使用して完全なAIDを取得してください。 – David

0

をあなたはthis oneようAIDリストを使用することができます。しかし、カードによっては、リストを反復処理するときに「間違った」データで応答します。すなわち、V-Pay VISAカードがマエストロとして読まれたケースがありました。大きなAIDリストを繰り返してカード情報を開く必要がある場合は、カードから実際のAIDを取得するためのフラグを追加してから、メインAIDのカードを読むためのメインメソッドに戻ります提供されます。

のような何か:0x90をが返された場合AIDリスト

  • を反復

    1. 読むカード(成功した読み取り)、抽出データ
    2. データが返さチェック型AID(0x4f)です。
    3. その場合は、リストから消去し、適切なAIDを使用してデータを再度取得してください。カードから直接得られたものであることがわかっています。

    通常、AIDはカードの最初のレコードに入ってくるので、このループはプロセスが正しいことを最低限の時間コストで保証します。

  • 関連する問題