Reading EMV Cards over NFC on Android
A project that uses a phone’s NFC to read and parse EMV cards, showing APDU commands and tags in real time.
重點摘要
Tap a contactless card and trace the EMV exchange step by step
Reads PPSE, AID, GPO, records, and parses EMV TLV tags
Built with Kotlin, Compose, MVVM, Clean Architecture, and a custom parser
The article describes Tap to Pay Android, an educational Android app built to explore what happens between tapping a contactless card and a terminal accepting it. Using the phone’s NFC, it reads and parses EMV cards and displays APDU commands, responses, and EMV tags in real time. The app walks through PPSE selection, AID discovery, application selection, GPO, record reading, and EMV parsing. The project is explicitly non-commercial, processes everything locally, and does not store or transmit card data. Technically, it is built with Kotlin, Jetpack Compose, Material 3, MVVM, Clean Architecture, Coroutines, StateFlow, Android NFC/ISO-DEP, and a custom EMV parser.
在 Android 上通过 NFC 读取 EMV 卡
这个项目用手机 NFC 读取并解析 EMV 卡,并实时显示 APDU 指令与标签交换过程。
重點摘要
从轻触非接触卡开始,逐步追踪 EMV 通信流程
包含 PPSE、AID、GPO、记录读取与 EMV TLV 解析
使用 Kotlin、Compose、MVVM、Clean Architecture 和自研解析器实现
本文介绍 Tap to Pay Android 这一教育性 Android 应用,旨在弄清楚非接触卡被轻触到终端接受之间到底发生了什么。应用利用手机 NFC 读取并解析 EMV 卡,在界面中实时展示 APDU 指令、响应以及 EMV 标签。流程包括 PPSE 选择、AID 发现、应用选择、GPO、记录读取和 EMV 解析。作者明确说明该项目不用于商业支付,所有处理都在本地完成,不存储也不传输卡片数据。技术上,项目采用 Kotlin、Jetpack Compose、Material 3、MVVM、Clean Architecture、Coroutines、StateFlow、Android NFC/ISO-DEP,并从零实现了 EMV 解析器。
透過 Android NFC 讀取 EMV 卡
這個專案用手機 NFC 讀取並解析 EMV 卡,並即時顯示 APDU 指令與標籤交換內容。
重點摘要
從感應非接觸卡開始,逐步追蹤 EMV 通訊流程
涵蓋 PPSE、AID、GPO、記錄讀取與 EMV TLV 解析
以 Kotlin、Compose、MVVM、Clean Architecture 與自製解析器實作
本文介紹 Tap to Pay Android 這個教育性 Android 應用,目標是理解非接觸卡輕觸後到終端機完成接受之間實際發生的流程。它透過手機 NFC 讀取並解析 EMV 卡,並在介面中即時顯示 APDU 指令、回應與 EMV 標籤。應用程式依序展示 PPSE 選擇、AID 探索、應用程式選擇、GPO、記錄讀取與 EMV 解析。作者強調這不是商業支付工具,所有處理都在本機完成,不儲存也不傳送卡片資料。專案使用 Kotlin、Jetpack Compose、Material 3、MVVM、Clean Architecture、Coroutines、StateFlow、Android NFC/ISO-DEP,並自行撰寫 EMV 解析器。