如何向Mifare Classic 1K卡片写入可正常触发的有效URL
实现核心逻辑
Mifare Classic 1K无需依赖第三方APP即可触发手机打开浏览器的核心是写入标准NDEF(NFC数据交换格式)报文,只要手机开启NFC功能即可原生识别该格式。
URL转十六进制NDEF格式方法
以写入https://example.com为例,转换步骤如下:
- 固定NDEF起始标识:首字节为
0x03,代表后续为NDEF消息 - 填写NDEF报文总长度:计算所有后续报文字节数,本例为15,对应
0x0F - 固定NDEF记录头:
0xD1(代表单条短记录、Well-Known类型) - 类型长度:固定为
0x01 - 负载长度:计算规则为「URI前缀编码长度 + 实际URL去前缀后的长度」,本例
https://对应前缀编码0x03,去前缀后内容为example.com共11字节,总负载长度为12,对应0x0C - 类型标识:固定为
0x55(ASCII码U,代表URI记录类型) - URI前缀编码,常用编码对应关系:
0x00:无前缀,需写入完整URL0x01:http://www.0x02:https://www.0x03:https://0x04:http://
- 写入URL去前缀后的ASCII转十六进制内容:
example.com对应65 78 61 6D 70 6C 65 2E 63 6F 6D - 结束标识:尾字节固定为
0xFE,代表NDEF报文结束
最终本例完整的十六进制写入串为:03 0F D1 01 0C 55 03 65 78 61 6D 70 6C 65 2E 63 6F 6D FE
卡片存储位置规则
- Mifare Classic 1K共16个扇区,每个扇区包含4个16字节的块,每个扇区的最后一个块为密钥/访问控制块,禁止写入业务数据
- 扇区0为厂商信息块,绝对不要修改,写入错误会导致卡片永久失效
- NDEF数据默认存储在扇区1的块4、块5、块6(三个数据块共48字节可用空间),默认访问密钥为
A0A1A2A3A4A5(NDEF格式通用A密钥)或全F密钥FFFFFFFFFFFF - 若URL过长超过48字节,可依次使用扇区2、扇区3等后续扇区的非控制块存储,注意避开每个扇区的最后一个块即可
验证注意事项
- 安卓设备需在NFC设置中开启「NFC标签自动读取」功能,iOS设备需升级至iOS13及以上版本,即可原生识别NDEF URL标签自动弹出浏览器
- 写入前建议先读取对应块的原有内容,确认无重要数据后再覆盖,避免卡片原有功能失效
内容的提问来源于stack exchange,提问作者S.James
相关产品推荐
相关产品推荐

