经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android识别NFC芯片制造商的方法
来源:jb51  时间:2021/11/29 9:29:23  对本文有异议

如何识别?

通过NFC模块的Serial Number即UID,用户访问权限为R只读,每颗NFC芯片独有序列号(UID),在出厂时写入,用户不能改写。

Android如何实现?

通过Intent获取UID

  1. /**
  2. * 读取nfcUID 返回String类型大写的UID
  3. *
  4. * 这个测试顺便加上的,下面用不到,做个笔记~~
  5. *
  6. */
  7. public static String readUID(Intent intent) throws UnsupportedEncodingException {
  8. Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
  9. byte[] uid = tagFromIntent != null ? tagFromIntent.getId() : null;
  10. return HexUtil.encodeHexStr(uid, false);
  11. }
  12. /**
  13. * 读取nfcUID 返回byte[]数组
  14. *
  15. */
  16. public static byte[] readUID(Intent intent) throws UnsupportedEncodingException {
  17. Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
  18. return tagFromIntent.getId();
  19. }

HexUtil工具类:

  1. public class HexUtil {
  2.  
  3. /**
  4. * 用于建立十六进制字符的输出的小写字符数组
  5. */
  6. private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  7. 'a', 'b', 'c', 'd', 'e', 'f'};
  8.  
  9. /**
  10. * 用于建立十六进制字符的输出的大写字符数组
  11. */
  12. private static final char[] DIGITS_UPPER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
  13. 'A', 'B', 'C', 'D', 'E', 'F'};
  14.  
  15. /**
  16. * 将字节数组转换为十六进制字符数组
  17. *
  18. * @param data byte[]
  19. * @param toDigits 用于控制输出的char[]
  20. * @return 十六进制char[]
  21. */
  22. protected static char[] encodeHex(byte[] data, char[] toDigits) {
  23. int l = data.length;
  24. char[] out = new char[l << 1];
  25. // two characters form the hex value.
  26. for (int i = 0, j = 0; i < l; i++) {
  27. out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
  28. out[j++] = toDigits[0x0F & data[i]];
  29. }
  30. return out;
  31. }
  32.  
  33. /**
  34. * 将字节数组转换为十六进制字符串
  35. *
  36. * @param data byte[]
  37. * @param toLowerCase <code>true</code> 传换成小写格式 , <code>false</code> 传换成大写格式
  38. * @return 十六进制String
  39. */
  40. public static String encodeHexStr(byte[] data, boolean toLowerCase) {
  41. return encodeHexStr(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
  42. }
  43.  
  44. /**
  45. * 将字节数组转换为十六进制字符串
  46. *
  47. * @param data byte[]
  48. * @param toDigits 用于控制输出的char[]
  49. * @return 十六进制String
  50. */
  51. protected static String encodeHexStr(byte[] data, char[] toDigits) {
  52. if (data == null) {
  53. return "";
  54. }
  55. return new String(encodeHex(data, toDigits));
  56. }
  57. }

通过UID去查询厂商

  1. public class Manufacturer {
  2.  
  3. private static final String MNF_UNKNOWN = "Unknown Manufacture";
  4.  
  5. public static final Map<Byte, String> ManufacturerName;
  6.  
  7. static {
  8. ManufacturerName = new HashMap<>();
  9. ManufacturerName.put((byte)1, "Motorola");
  10. ManufacturerName.put((byte)2, "STMicroelectronics SA ");
  11. ManufacturerName.put((byte)3, "Hitachi, Ltd");
  12. ManufacturerName.put((byte)4, "NXP Semiconductors");
  13. ManufacturerName.put((byte)5, "Infineon Technologies AG ");
  14. ManufacturerName.put((byte)6, "Cylink");
  15. ManufacturerName.put((byte)7, "Texas Instrument");
  16. ManufacturerName.put((byte)8, "Fujitsu Limited");
  17. ManufacturerName.put((byte)9, "Matsushita Electronics Corporation, Semiconductor Company");
  18. ManufacturerName.put((byte)10, "NEC");
  19. ManufacturerName.put((byte)11, "Oki Electric Industry Co. Ltd");
  20. ManufacturerName.put((byte)12, "Toshiba Corp");
  21. ManufacturerName.put((byte)13, "Mitsubishi Electric Corp");
  22. ManufacturerName.put((byte)14, "Samsung Electronics Co. Ltd");
  23. ManufacturerName.put((byte)15, "Hynix");
  24. ManufacturerName.put((byte)16, "LG-Semiconductors Co. Ltd");
  25. ManufacturerName.put((byte)17, "Emosyn-EM Microelectronics");
  26. ManufacturerName.put((byte)18, "INSIDE Technology");
  27. ManufacturerName.put((byte)19, "ORGA Kartensysteme GmbH");
  28. ManufacturerName.put((byte)20, "SHARP Corporation");
  29. ManufacturerName.put((byte)21, "ATMEL");
  30. ManufacturerName.put((byte)22, "EM Microelectronic-Marin SA");
  31. ManufacturerName.put((byte)23, "SMARTRAC TECHNOLOGY GmbH ");
  32. ManufacturerName.put((byte)24, "ZMD AG");
  33. ManufacturerName.put((byte)25, "XICOR, Inc");
  34. ManufacturerName.put((byte)26, "Sony Corporation");
  35. ManufacturerName.put((byte)27, "Malaysia Microelectronic Solutions Sdn. Bhd");
  36. ManufacturerName.put((byte)28, "Emosyn");
  37. ManufacturerName.put((byte)29, "Shanghai Fudan Microelectronics Co. Ltd");
  38. ManufacturerName.put((byte)30, "Magellan Technology Pty Limited");
  39. ManufacturerName.put((byte)31, "Melexis NV BO");
  40. ManufacturerName.put((byte)32, "Renesas Technology Corp");
  41. ManufacturerName.put((byte)33, "TAGSYS");
  42. ManufacturerName.put((byte)34, "Transcore");
  43. ManufacturerName.put((byte)35, "Shanghai belling corp., ltd");
  44. ManufacturerName.put((byte)36, "Masktech Germany Gmbh");
  45. ManufacturerName.put((byte)37, "Innovision Research and Technology Plc");
  46. ManufacturerName.put((byte)38, "Hitachi ULSI Systems Co., Ltd");
  47. ManufacturerName.put((byte)39, "Yubico AB ");
  48. ManufacturerName.put((byte)40, "Ricoh");
  49. ManufacturerName.put((byte)41, "ASK");
  50. ManufacturerName.put((byte)42, "Unicore Microsystems, LLC");
  51. ManufacturerName.put((byte)43, "Dallas Semiconductor/Maxim");
  52. ManufacturerName.put((byte)44, "Impinj, Inc");
  53. ManufacturerName.put((byte)45, "RightPlug Alliance");
  54. ManufacturerName.put((byte)46, "Broadcom Corporation");
  55. ManufacturerName.put((byte)47, "MStar Semiconductor, Inc");
  56. ManufacturerName.put((byte)48, "BeeDar Technology Inc");
  57. ManufacturerName.put((byte)49, "RFIDsec");
  58. ManufacturerName.put((byte)50, "Schweizer Electronic AG ");
  59. ManufacturerName.put((byte)51, "AMIC Technology Corp");
  60. ManufacturerName.put((byte)52, "Mikron JSC");
  61. ManufacturerName.put((byte)53, "Fraunhofer Institute for Photonic Microsystems");
  62. ManufacturerName.put((byte)54, "IDS Microchip AG");
  63. ManufacturerName.put((byte)55, "Kovio");
  64. ManufacturerName.put((byte)56, "HMT Microelectronic Ltd");
  65. ManufacturerName.put((byte)57, "Silicon Craft Technology");
  66. ManufacturerName.put((byte)58, "Advanced Film Device Inc");
  67. ManufacturerName.put((byte)59, "Nitecrest Ltd");
  68. ManufacturerName.put((byte)60, "Verayo Inc");
  69. ManufacturerName.put((byte)61, "HID Global");
  70. ManufacturerName.put((byte)62, "Productivity Engineering Gmbh");
  71. ManufacturerName.put((byte)63, "Austriamicrosystems AG (reserved)");
  72. ManufacturerName.put((byte)64, "Gemalto SA");
  73. ManufacturerName.put((byte)65, "Renesas Electronics Corporation");
  74. ManufacturerName.put((byte)66, "3Alogics Inc");
  75. ManufacturerName.put((byte)67, "Top TroniQ Asia Limited");
  76. ManufacturerName.put((byte)68, "Gentag Inc (USA)");
  77. ManufacturerName.put((byte)69, "Invengo Information Technology Co.Ltd ");
  78. ManufacturerName.put((byte)70, "Guangzhou Sysur Microelectronics, Inc");
  79. ManufacturerName.put((byte)71, "CEITEC S.A");
  80. ManufacturerName.put((byte)72, "Shanghai Quanray Electronics Co. Ltd");
  81. ManufacturerName.put((byte)73, "MediaTek Inc");
  82. ManufacturerName.put((byte)74, "Angstrem PJSC");
  83. ManufacturerName.put((byte)75, "Celisic Semiconductor (Hong Kong) Limited");
  84. ManufacturerName.put((byte)76, "LEGIC Identsystems AG");
  85. ManufacturerName.put((byte)77, "Balluff GmbH");
  86. ManufacturerName.put((byte)78, "Oberthur Technologies ");
  87. ManufacturerName.put((byte)79, "Silterra Malaysia Sdn. Bhd");
  88. ManufacturerName.put((byte)80, "DELTA Danish Electronics, Light & Acoustics ");
  89. ManufacturerName.put((byte)81, "Giesecke & Devrient GmbH");
  90. ManufacturerName.put((byte)82, "Shenzhen China Vision Microelectronics Co., Ltd");
  91. ManufacturerName.put((byte)83, "Shanghai Feiju Microelectronics Co. Ltd");
  92. ManufacturerName.put((byte)84, "Intel Corporation");
  93. ManufacturerName.put((byte)85, "Microsensys GmbH");
  94. ManufacturerName.put((byte)86, "Sonix Technology Co., Ltd");
  95. ManufacturerName.put((byte)87, "Qualcomm Technologies Inc");
  96. ManufacturerName.put((byte)88, "Realtek Semiconductor Corp");
  97. ManufacturerName.put((byte)89, "Freevision Technologies Co. Ltd");
  98. ManufacturerName.put((byte)90, "Giantec Semiconductor Inc");
  99. ManufacturerName.put((byte)91, "JSC Angstrem-T");
  100. ManufacturerName.put((byte)92, "STARCHIP");
  101. ManufacturerName.put((byte)93, "SPIRTECH");
  102. ManufacturerName.put((byte)94, "GANTNER Electronic GmbH");
  103. ManufacturerName.put((byte)95, "Nordic Semiconductor");
  104. ManufacturerName.put((byte)96, "Verisiti Inc");
  105. ManufacturerName.put((byte)97, "Wearlinks Technology Inc");
  106. ManufacturerName.put((byte)98, "Userstar Information Systems Co., Ltd");
  107. ManufacturerName.put((byte)99, "Pragmatic Printing Ltd");
  108. ManufacturerName.put((byte)100, "Associado Laboratde Sistemas IntegrTecnolLSI-TEC");
  109. ManufacturerName.put((byte)101, "Tendyron Corporation");
  110. ManufacturerName.put((byte)102, "MUTO Smart Co., Ltd");
  111. ManufacturerName.put((byte)103, "ON Semiconductor");
  112. ManufacturerName.put((byte)104, "TüB?TAK B?LGEM");
  113. ManufacturerName.put((byte)105, "Huada Semiconductor Co., Ltd");
  114. ManufacturerName.put((byte)106, "SEVENEY");
  115. ManufacturerName.put((byte)107, "ISSM");
  116. ManufacturerName.put((byte)108, "Wisesec Ltd");
  117. ManufacturerName.put((byte)126, "Holtek");
  118. ManufacturerName.put((byte)-112, "Shanghai Fudan Microelectronics Co. Ltd");
  119. }
  120.  
  121.  
  122. /**
  123. * 通过UID/Serial Number获取芯片制造商名字
  124. * @param paramArrayOfByte UID/Serial Number
  125. * @return 制造商名字
  126. */
  127. public static String getManufacturerByUid(byte[] paramArrayOfByte) {
  128. if (paramArrayOfByte != null)
  129. try {
  130. if (paramArrayOfByte.length == 8) {
  131. byte[] arrayOfByte = new byte[3];
  132. System.arraycopy(paramArrayOfByte, paramArrayOfByte.length - 3, arrayOfByte, 0, 3);
  133. return Arrays.equals(arrayOfByte, new byte[] { 29, 4, -32 })
  134. ? ManufacturerName.get((byte)29) : (Arrays.equals(arrayOfByte, new byte[] { -95, 4, -32 })
  135. ? ManufacturerName.get((byte)29) : (Arrays.equals(arrayOfByte, new byte[] { -94, 4, -32 })
  136. ? ManufacturerName.get((byte)29) : ManufacturerName.get(paramArrayOfByte[6])));
  137. }
  138. if (paramArrayOfByte.length == 7)
  139. return ManufacturerName.get(paramArrayOfByte[0]);
  140. } catch (Exception exception) {
  141. exception.printStackTrace();
  142. }
  143. return MNF_UNKNOWN;
  144. }

到此这篇关于Android识别NFC芯片制造商的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持w3xue

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号