我正在使用Android Cilico F750,专用的RFID阅读器是CF-RS103。RFID标签类型为MIFARE Ultralight类型C。
[使用专用读卡器读取时,标签的ID为:2054270212(10位数)。
但是当使用Android手机阅读时,ID为:36113912876727556(17位数字),而ID的反向ID为:1316602805183616(16位数字)。
没有人知道为什么会发生这种情况,并且是否有可能将10位ID转换为17位ID,反之亦然。
我不知道您为什么总是尝试转换为十进制?并且请尝试说明有关您用于读取UID的代码的更多信息。
关于您的电话号码,并将17位数字转换为10位数字;我将它们都转换为十六进制:
36139312876727556(17digit)以十六进制表示:8064837A71AD04。
2054270212(10位数),十六进制:7A71AD04
您注意到,您可以仅修剪前三个字节以获取10位数字。
而且,我确实相信他们都不是UID。但是7个字节(如Andrew所说),您已经在照片中读取了它:(04:B5:71:7A:83:64:80)
所以我认为答案是,因为您将7字节ID转换为十进制,所以由于转换为十进制,所以得到的数字长度是可变的。
“字节数据类型是一个8位带符号的二进制补码整数。其最小值为-128,最大值为127(包括127)。”
来自https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
可以生成一个具有1,2或3个字符的十进制数字,因此id的长度可以不同。
似乎从理论上讲转换也有问题,它在其中也应该有负数。
如果您希望它可以被人类阅读,最好将它作为十六进制字符串来处理。
Java中将ID的2页转换为十六进制的正确方法是
StringBuilder Uid;
for (int i = 0; i < result.length; i++) {
// byte 4 is a check byte
if (i == 3) continue;
Uid.append(String.format("%02X ", result[i]));
}
或者,如果不是低水平阅读,则>
https://developer.android.com/reference/android/nfc/Tag#getId()
将获得您的ID。
根据卡的规格表https://www.nxp.com/docs/en/data-sheet/MF0ICU2_SDS.pdf(第7.3.1节)的说明
有校验字节是ID的一部分,尽管同一张卡上的校验字节总是相同的,并且仍然会为您提供唯一的ID,但从技术上讲,它不是ID的一部分。
请注意,“ 36139312876727556(17digit)和反向ID”在转换为十六进制并反向实际时为7个字节,并以正确的数字开头。
10位数字看起来像7字节数字的前4个字节也被颠倒了。