跳到內容

RC522 修改 CUID 卡號教學(Arduino / ESP32S3)

Arduino UNOESP32S3 搭配 MFRC522(RC522) 模組,把 CUID(Gen2 Magic)卡的 4-byte 卡號改成你要的 UID。這是給手上有 RC522 模組、想自己燒錄改卡號的自造者看的;只想用手機改的,請改看 👉 NTAG 複製卡使用教學


為什麼是一份「獨立範例」而不是函式庫功能?

「為什麼是一份「獨立範例」而不是函式庫功能?」章節

RC522 在 Arduino 生態最通用的函式庫是 miguelbalboa/rfid,但作者已明確表示不再維護、也不接受新增功能的 PR。因此「改 CUID 卡號」這個功能不會進到函式庫裡,只能自己寫一段程式來做(底層仍沿用這個函式庫)。

我們把這段寫好、測過,開源在 👉 GitHub · GreenMochi/RC522-CUID(GPLv3,含正體中文與英文版)。


  • 開發板:Arduino UNOESP32S3(範例兩種都有)
  • MFRC522(RC522) RFID 模組
  • CUID 卡(Gen2 Magic Card):一般 M1 卡的 block 0 是唯讀的,改不了,必須是可重寫 block 0 的 CUID
  • 杜邦線數條

不確定卡片類型?先看 👉 卡片判斷 SOP門禁卡晶片資料庫


Arduino UNO(腳位固定,不可自定義)

「Arduino UNO(腳位固定,不可自定義)」章節
UNO 腳位MFRC522 腳位
9RST
10SDA (SS)
11MOSI
12MISO
13SCK
3.3V3.3V
GNDGND

ESP32S3(腳位可自定義,以下為範例預設值)

「ESP32S3(腳位可自定義,以下為範例預設值)」章節
ESP32S3 腳位MFRC522 腳位
4RST
5SDA (SS)
16MISO
17SCK
18MOSI
3.3V3.3V
GNDGND

設定要寫入的卡號

「設定要寫入的卡號」章節

修改範例程式中的 newUid 陣列(4 bytes)為你要的卡號,BCC 校驗碼由程式自動計算,不用自己填:

// 要寫入的新卡號 (4 bytes),BCC 校驗位元由程式自動計算
byte newUid[] = {0x12, 0x34, 0x56, 0x69}; // 請替換為您的卡號

程式內部這樣算 BCC(這段請勿更動):

// block0Data[4] 就是 BCC 校驗位元
block0Data[4] = uid[0] ^ uid[1] ^ uid[2] ^ uid[3];

這裡是 4-byte Mifare Classic CUID 的算法(4 個 byte 直接 XOR)。若你要改的是 7-byte 的 NTAG / Ultralight 卡,寫入方式與 BCC 算法都不同,請改用手機工具 👉 NTAG A2 指令產生器

如果讀不到 / 驗證失敗,換把金鑰

「如果讀不到 / 驗證失敗,換把金鑰」章節

預設用出廠金鑰 FF FF FF FF FF FF。若你的卡片非此金鑰,修改 defaultKey

MFRC522::MIFARE_Key defaultKey = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};

其他常見金鑰可依序試:

A0 A1 A2 A3 A4 A5
B0 B1 B2 B3 B4 B5
4D 3A 99 C3 51 DD
1A 98 2C 7E 45 9A
D3 F7 D3 F7 D3 F7
AA BB CC DD EE FF
00 00 00 00 00 00

  1. 依語言下載範例程式:rc522-cuid-zhtw.ino(正體中文)。
  2. 依上方接線表完成接線。
  3. Arduino IDE 開啟並上傳程式(記得先裝好 MFRC522 函式庫)。
  4. 開啟序列埠監控器,速度選 9600
  5. 把 CUID 卡靠近讀卡器,程式會讀取原卡號、確認是可寫入的 Gen2 Magic 卡,再寫入你設定的新卡號,並透過序列埠回報狀態。

程式也內建防止對同一張卡重複寫入,避免不小心連寫。


症狀可能原因與處理
完全讀不到卡供電/接線問題;先確認是 3.3V、SPI 五條線沒接錯,杜邦線鬆動也很常見
讀得到卡但寫入失敗卡不是 Gen2 Magic(block 0 唯讀的普通 M1 卡改不了),或金鑰不對,換上面清單試
卡寫完變磚 / 門禁讀不到多半是 BCC 被改壞或用了未經測試的程式;請用本頁範例、不要動校驗那段
ESP32S3 讀卡不穩檢查程式中的 SPI 腳位是否與實際接線一致;供電不足時 RC522 也會時好時壞

RC522 還是 PN532?該買哪個

「RC522 還是 PN532?該買哪個」章節

RC522 便宜、適合 Arduino 燒錄自己玩;若你要的是接電腦、圖形介面、少寫程式地讀寫 13.56MHz 卡,PN532 更順手。比較請見 👉 PN532 基本使用手冊 與部落格 Proxmark3 vs PN532