Skip to the content.

MagCode: NFC-Enabled Barcodes for NFC-Disabled Smartphones

Mobile payment has achieved explosive growth in recent years due to its contactless feature, which lowers the infection risk of COVID-19. In the market, near-field communication (NFC) and barcodes have become the de facto standard technologies for mobile payment. The NFC-based payment outperforms barcode-based payment in terms of security, usability, and convenience. It is especially more user-friendly for the amblyopia group. Unfortunately, NFC functionality is unavailable in nearly half of smartphones in the market nowadays due to the shortage of NFC modules or being disabled for security reasons.

In this work, we present MagCode, a cross-technology communication between an NFC reader and a camera, which allows customers to enjoy the high security and convenience of NFC-based payment and the pervasiveness of cameras. At the heart of MagCode is the harmless magnetic interference on the CMOS image sensor of a smartphone placed nearby the NFC reader, resulting in a group of barcode-like stripes appearing on the captured images. We take advantage of these stripes to encode the data and achieve simplex communication from an NFC reader to an NFC-denied or NFC-disabled smartphone. In particular, we design and implement a stack of protocols from the physical to the transport layer and test the proof-of-concept prototype across 11 smart devices. Extensive evaluations demonstrate a maximum throughput of 2.58 kbps, which outperforms the magnetometer-based solution by 58x. It takes 1.8 seconds on average to accomplish the data exchange between an NFC reader to a smartphone in relation to mobile payments.

Youtube Demo

Bilibili Demo

Paper

@inproceedings{dai2023magcode,
  title={MagCode: NFC-Enabled Barcodes for NFC-Disabled Smartphones},
  author={Dai, Donghui and An, Zhenlin and Pan, Qingrui and Yang, Lei},
  booktitle={Proceedings of the 29th Annual International Conference on Mobile Computing And Networking},
  address = {Madrid, Spain},
  year={2023}
}