NFC Card Data Extractor Development

Job ID: 38673512

Budget: $250 – $750 USD

Project Requirements

Platform: The project should be implemented in Flutter (for cross-platform support) or Java (for native Android).

EMV Standard Compatibility: The solution must follow the EMV standard to ensure compatibility with different card brands.

Data to be extracted:

Card Brand: Identify the card brand.

PAN (Primary Account Number): Card number.

Holder Name: Cardholder's name.

Expiration Date: Card expiration date.

Token: Payment token generated by the card/device.

Cryptogram: Transaction authentication cryptogram.



Implementation Flow

1. Project Setup

Flutter: Configure the project with the flutter_nfc_kit library for NFC communication.

dependencies:
flutter_nfc_kit: ^3.4.0

Java: For native Android implementation, set up NFC permissions and use the IsoDep API for communication.



2. Start NFC Reading Session

Activate the NFC reading session and detect the type of card or device.

Select the payment application AID on the card:

String selectAidVisa = '00A4040007A0000000031010'; // Example for Visa
String selectAidMastercard = '00A4040007A0000000041010'; // Example for Mastercard



3. Send APDU Commands to Retrieve Data

Send APDU commands to select the AID and retrieve transaction information using commands like GET PROCESSING OPTIONS, READ RECORD, etc.

Example commands:

String getProcessingOptions = '80A8000002830000';
String response = await FlutterNfcKit.transceive(getProcessingOptions);



4. Parse TLV (Tag-Length-Value) Data

Implement a function to parse TLV data and extract the required information such as PAN, holder name, expiration date, cryptogram, and token.

Identify specific tags:

Tag 5A: PAN (card number)

Tag 5F20: Holder name

Tag 5F24: Expiration date

Tag 9F26: Cryptogram

Tag 4F or 84: AID to identify the card brand




5. Identify Card Brand

The card brand can be determined from the AID or based on the first digits of the PAN (BIN). Examples:

Visa: A0000000031010

Mastercard: A0000000041010

American Express: A000000025

Discover: A0000001523010

Diners Club: A0000001524010

JCB: A0000000651010

Elo: A0000000410001

UnionPay: A0000003330101

Hipercard: A0000001440001