2011-06-28 26 views
14

Estoy tratando de leer los datos de la tarjeta de crédito de la tarjeta VISA pero no pude tener éxito. Como en los recursos de Internet, he encontrado que para la tarjeta MASTER podemos seleccionar el directorio PSE usando el archivo 1PAY.SYS.DDF01 y luego lee los registros. Pero para VISA no es obligatorio y cuando uso el siguiente archivo usando el comando SELECCIONAR para obtener el directorio PSE obtengo la respuesta como '6A82'. Lo que significa que no es compatible con el sistema de archivos. Busqué el error en el libro 1 de EMV 4.2 (especificación EMV) y dice que tenemos que usar una "Lista de AID". Dice "El terminal emite otro comando SELECT usando el siguiente AID en su lista". No puedo entender esto y continuar.Cómo leer los detalles de la tarjeta VISA inteligente basada en EMV

¿Alguna ayuda sobre cómo obtener el PSE para la tarjeta VISA o el AID para obtener los detalles de la tarjeta de crédito?

Gracias, Shekhar

Respuesta

3

Así que el problema es que no sabes AID de la aplicación en la tarjeta? No hay un método para obtenerlos (excepto PSE), primero debe saber qué aplicaciones admite la tarjeta. Entonces, la "Lista de AID" es una lista de los AID que usted respalda, que le indicó su adquirente. Puede intentar crear esta lista usted mismo basándose en algunos AID estándar que ha enumerado aquí: http://en.wikipedia.org/wiki/EMV#Application_selection

1

Es un poco extraño para mí ... Mi investigación indica que para VISA esa aplicación siempre estará disponible, pero para Mastercard no es obligatorio ...

de todos modos, aquí está el comando que envío a mi lector de tarjetas finde para seleccionar esta solicitud:

//    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. 

el ejemplo de código es para el objetivo C.

comparar los datos tu sientes d con los datos que estoy enviando y ver si corresponde. Mientras tanto, estaré investigando la lista de AID.

Espero que ayude. Ezfrag

6

En primer lugar, el applet PPSE no es específico de VISA ni de MasterCard. Está definido por EMV y se usa como se notó correctamente para listar los AID de las aplicaciones de pago disponibles en la tarjeta. Pero si no está allí, los terminales prueban todos los AID compatibles para construir la lista de candidatos.

Si desea seleccionar el applet VISA, pero no conoce el AID completo, puede usar la selección parcial. Dado que toda la VISA SIDA debe empezar con la VISA RID: A0 00 00 00 03. Se puede tratar de enviar este comando:

Esto devolverá el primer caso:

00 A4 04 00 05 A0 00 00 00 03 00

y esto le dará más si tiene en su tarjeta:

00 A4 04 02 05 A0 00 00 00 03 00

+0

@KamKamen Goranchev ¿conoces cuál debería ser la respuesta APDU para el comando anterior? – nish1013

+1

La respuesta será la Palabra de estado 61XX si hay una aplicación con un RID dado. Si es así, use el comando OBTENER RESPUESTA para recuperar el AID completo. – David

0

puede utilizar una Lista de ayuda como this one. Sin embargo, algunas tarjetas responden con datos "incorrectos" al iterar a través de la lista. es decir, tuve el caso en que una tarjeta VISA de V-Pay se leyó como Maestro. Si tiene que recorrer una gran lista de AID para "abrir" la información de la tarjeta, le recomendaría que agregue una bandera para obtener los AID reales de la tarjeta, luego regrese al método principal para leer la tarjeta con la AYUDA principal. previsto.

Algo así como:

  1. leer la tarjeta iteración a través de una lista de ayudas
  2. Si se devuelve 0x90 (lectura con éxito), extraer datos
  3. Comprobar donde los datos devueltos es de tipo AYUDA (0x4F).
  4. Cuando sea así, borre su lista y vuelva a obtener los datos con la AYUDA adecuada ahora que sabe que es lo correcto, ya que proviene directamente de la tarjeta.

Como el AID generalmente viene en los primeros registros de la tarjeta, este ciclo garantiza que el proceso sea correcto a un costo de tiempo mínimo.

Cuestiones relacionadas