Android识别NFC芯片制造商的方法

如何识别?

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

Android如何实现?

通过Intent获取UID

    /**
     * 读取nfcUID 返回String类型大写的UID
     *
     * 这个测试顺便加上的,下面用不到,做个笔记~~
     *
     */
    public static String readUID(Intent intent) throws UnsupportedEncodingException {
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        byte[] uid = tagFromIntent != null ? tagFromIntent.getId() : null;
        return HexUtil.encodeHexStr(uid, false);
    }

    /**
     * 读取nfcUID 返回byte[]数组
     *
     */
    public static byte[] readUID(Intent intent) throws UnsupportedEncodingException {
        Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        return tagFromIntent.getId();
    }

HexUtil工具类:

public class HexUtil {

    /**
     * 用于建立十六进制字符的输出的小写字符数组
     */
    private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
            'a', 'b', 'c', 'd', 'e', 'f'};

    /**
     * 用于建立十六进制字符的输出的大写字符数组
     */
    private static final char[] DIGITS_UPPER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
            'A', 'B', 'C', 'D', 'E', 'F'};

    /**
     * 将字节数组转换为十六进制字符数组
     *
     * @param data     byte[]
     * @param toDigits 用于控制输出的char[]
     * @return 十六进制char[]
     */
    protected static char[] encodeHex(byte[] data, char[] toDigits) {
        int l = data.length;
        char[] out = new char[l << 1];
        // two characters form the hex value.
        for (int i = 0, j = 0; i < l; i++) {
            out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
            out[j++] = toDigits[0x0F & data[i]];
        }
        return out;
    }

    /**
     * 将字节数组转换为十六进制字符串
     *
     * @param data        byte[]
     * @param toLowerCase <code>true</code> 传换成小写格式 , <code>false</code> 传换成大写格式
     * @return 十六进制String
     */
    public static String encodeHexStr(byte[] data, boolean toLowerCase) {
        return encodeHexStr(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
    }

    /**
     * 将字节数组转换为十六进制字符串
     *
     * @param data     byte[]
     * @param toDigits 用于控制输出的char[]
     * @return 十六进制String
     */
    protected static String encodeHexStr(byte[] data, char[] toDigits) {
        if (data == null) {
            return "";
        }
        return new String(encodeHex(data, toDigits));
    }
}
 

通过UID去查询厂商

public class Manufacturer {

    private static final String MNF_UNKNOWN = "Unknown Manufacture";

    public static final Map<Byte, String> ManufacturerName;

    static {
        ManufacturerName = new HashMap<>();
        ManufacturerName.put((byte)1, "Motorola");
        ManufacturerName.put((byte)2, "STMicroelectronics SA ");
        ManufacturerName.put((byte)3, "Hitachi, Ltd");
        ManufacturerName.put((byte)4, "NXP Semiconductors");
        ManufacturerName.put((byte)5, "Infineon Technologies AG ");
        ManufacturerName.put((byte)6, "Cylink");
        ManufacturerName.put((byte)7, "Texas Instrument");
        ManufacturerName.put((byte)8, "Fujitsu Limited");
        ManufacturerName.put((byte)9, "Matsushita Electronics Corporation, Semiconductor Company");
        ManufacturerName.put((byte)10, "NEC");
        ManufacturerName.put((byte)11, "Oki Electric Industry Co. Ltd");
        ManufacturerName.put((byte)12, "Toshiba Corp");
        ManufacturerName.put((byte)13, "Mitsubishi Electric Corp");
        ManufacturerName.put((byte)14, "Samsung Electronics Co. Ltd");
        ManufacturerName.put((byte)15, "Hynix");
        ManufacturerName.put((byte)16, "LG-Semiconductors Co. Ltd");
        ManufacturerName.put((byte)17, "Emosyn-EM Microelectronics");
        ManufacturerName.put((byte)18, "INSIDE Technology");
        ManufacturerName.put((byte)19, "ORGA Kartensysteme GmbH");
        ManufacturerName.put((byte)20, "SHARP Corporation");
        ManufacturerName.put((byte)21, "ATMEL");
        ManufacturerName.put((byte)22, "EM Microelectronic-Marin SA");
        ManufacturerName.put((byte)23, "SMARTRAC TECHNOLOGY GmbH ");
        ManufacturerName.put((byte)24, "ZMD AG");
        ManufacturerName.put((byte)25, "XICOR, Inc");
        ManufacturerName.put((byte)26, "Sony Corporation");
        ManufacturerName.put((byte)27, "Malaysia Microelectronic Solutions Sdn. Bhd");
        ManufacturerName.put((byte)28, "Emosyn");
        ManufacturerName.put((byte)29, "Shanghai Fudan Microelectronics Co. Ltd");
        ManufacturerName.put((byte)30, "Magellan Technology Pty Limited");
        ManufacturerName.put((byte)31, "Melexis NV BO");
        ManufacturerName.put((byte)32, "Renesas Technology Corp");
        ManufacturerName.put((byte)33, "TAGSYS");
        ManufacturerName.put((byte)34, "Transcore");
        ManufacturerName.put((byte)35, "Shanghai belling corp., ltd");
        ManufacturerName.put((byte)36, "Masktech Germany Gmbh");
        ManufacturerName.put((byte)37, "Innovision Research and Technology Plc");
        ManufacturerName.put((byte)38, "Hitachi ULSI Systems Co., Ltd");
        ManufacturerName.put((byte)39, "Yubico AB ");
        ManufacturerName.put((byte)40, "Ricoh");
        ManufacturerName.put((byte)41, "ASK");
        ManufacturerName.put((byte)42, "Unicore Microsystems, LLC");
        ManufacturerName.put((byte)43, "Dallas Semiconductor/Maxim");
        ManufacturerName.put((byte)44, "Impinj, Inc");
        ManufacturerName.put((byte)45, "RightPlug Alliance");
        ManufacturerName.put((byte)46, "Broadcom Corporation");
        ManufacturerName.put((byte)47, "MStar Semiconductor, Inc");
        ManufacturerName.put((byte)48, "BeeDar Technology Inc");
        ManufacturerName.put((byte)49, "RFIDsec");
        ManufacturerName.put((byte)50, "Schweizer Electronic AG ");
        ManufacturerName.put((byte)51, "AMIC Technology Corp");
        ManufacturerName.put((byte)52, "Mikron JSC");
        ManufacturerName.put((byte)53, "Fraunhofer Institute for Photonic Microsystems");
        ManufacturerName.put((byte)54, "IDS Microchip AG");
        ManufacturerName.put((byte)55, "Kovio");
        ManufacturerName.put((byte)56, "HMT Microelectronic Ltd");
        ManufacturerName.put((byte)57, "Silicon Craft Technology");
        ManufacturerName.put((byte)58, "Advanced Film Device Inc");
        ManufacturerName.put((byte)59, "Nitecrest Ltd");
        ManufacturerName.put((byte)60, "Verayo Inc");
        ManufacturerName.put((byte)61, "HID Global");
        ManufacturerName.put((byte)62, "Productivity Engineering Gmbh");
        ManufacturerName.put((byte)63, "Austriamicrosystems AG (reserved)");
        ManufacturerName.put((byte)64, "Gemalto SA");
        ManufacturerName.put((byte)65, "Renesas Electronics Corporation");
        ManufacturerName.put((byte)66, "3Alogics Inc");
        ManufacturerName.put((byte)67, "Top TroniQ Asia Limited");
        ManufacturerName.put((byte)68, "Gentag Inc (USA)");
        ManufacturerName.put((byte)69, "Invengo Information Technology Co.Ltd ");
        ManufacturerName.put((byte)70, "Guangzhou Sysur Microelectronics, Inc");
        ManufacturerName.put((byte)71, "CEITEC S.A");
        ManufacturerName.put((byte)72, "Shanghai Quanray Electronics Co. Ltd");
        ManufacturerName.put((byte)73, "MediaTek Inc");
        ManufacturerName.put((byte)74, "Angstrem PJSC");
        ManufacturerName.put((byte)75, "Celisic Semiconductor (Hong Kong) Limited");
        ManufacturerName.put((byte)76, "LEGIC Identsystems AG");
        ManufacturerName.put((byte)77, "Balluff GmbH");
        ManufacturerName.put((byte)78, "Oberthur Technologies ");
        ManufacturerName.put((byte)79, "Silterra Malaysia Sdn. Bhd");
        ManufacturerName.put((byte)80, "DELTA Danish Electronics, Light & Acoustics ");
        ManufacturerName.put((byte)81, "Giesecke & Devrient GmbH");
        ManufacturerName.put((byte)82, "Shenzhen China Vision Microelectronics Co., Ltd");
        ManufacturerName.put((byte)83, "Shanghai Feiju Microelectronics Co. Ltd");
        ManufacturerName.put((byte)84, "Intel Corporation");
        ManufacturerName.put((byte)85, "Microsensys GmbH");
        ManufacturerName.put((byte)86, "Sonix Technology Co., Ltd");
        ManufacturerName.put((byte)87, "Qualcomm Technologies Inc");
        ManufacturerName.put((byte)88, "Realtek Semiconductor Corp");
        ManufacturerName.put((byte)89, "Freevision Technologies Co. Ltd");
        ManufacturerName.put((byte)90, "Giantec Semiconductor Inc");
        ManufacturerName.put((byte)91, "JSC Angstrem-T");
        ManufacturerName.put((byte)92, "STARCHIP");
        ManufacturerName.put((byte)93, "SPIRTECH");
        ManufacturerName.put((byte)94, "GANTNER Electronic GmbH");
        ManufacturerName.put((byte)95, "Nordic Semiconductor");
        ManufacturerName.put((byte)96, "Verisiti Inc");
        ManufacturerName.put((byte)97, "Wearlinks Technology Inc");
        ManufacturerName.put((byte)98, "Userstar Information Systems Co., Ltd");
        ManufacturerName.put((byte)99, "Pragmatic Printing Ltd");
        ManufacturerName.put((byte)100, "Associado Laboratde Sistemas IntegrTecnolLSI-TEC");
        ManufacturerName.put((byte)101, "Tendyron Corporation");
        ManufacturerName.put((byte)102, "MUTO Smart Co., Ltd");
        ManufacturerName.put((byte)103, "ON Semiconductor");
        ManufacturerName.put((byte)104, "TÜBİTAK BİLGEM");
        ManufacturerName.put((byte)105, "Huada Semiconductor Co., Ltd");
        ManufacturerName.put((byte)106, "SEVENEY");
        ManufacturerName.put((byte)107, "ISSM");
        ManufacturerName.put((byte)108, "Wisesec Ltd");
        ManufacturerName.put((byte)126, "Holtek");
        ManufacturerName.put((byte)-112, "Shanghai Fudan Microelectronics Co. Ltd");
    }

    /**
     *  通过UID/Serial Number获取芯片制造商名字
     * @param paramArrayOfByte UID/Serial Number
     * @return 制造商名字
     */
    public static String getManufacturerByUid(byte[] paramArrayOfByte) {
        if (paramArrayOfByte != null)
            try {
                if (paramArrayOfByte.length == 8) {
                    byte[] arrayOfByte = new byte[3];
                    System.arraycopy(paramArrayOfByte, paramArrayOfByte.length - 3, arrayOfByte, 0, 3);
                    return Arrays.equals(arrayOfByte, new byte[] { 29, 4, -32 })
                            ? ManufacturerName.get((byte)29) : (Arrays.equals(arrayOfByte, new byte[] { -95, 4, -32 })
                            ? ManufacturerName.get((byte)29) : (Arrays.equals(arrayOfByte, new byte[] { -94, 4, -32 })
                            ? ManufacturerName.get((byte)29) : ManufacturerName.get(paramArrayOfByte[6])));
                }
                if (paramArrayOfByte.length == 7)
                    return ManufacturerName.get(paramArrayOfByte[0]);
            } catch (Exception exception) {
                exception.printStackTrace();
            }
        return MNF_UNKNOWN;
    }

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

(0)

相关推荐

  • android实现NFC读写功能

    一.NFC是什么? 近距离无线通讯技术,这个技术由非接触式射频识别(RFID)演变而来,由飞利浦半导体(现恩智浦半导体公司).诺基亚和索尼共同研制开发,其基础是RFID及互连技术.近场通信(Near Field Communication,NFC)是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内.其传输速度有106 Kbit/秒.212 Kbit/秒或者424 Kbit/秒三种.目前近场通信已通过成为ISO/IEC IS 18092国际标准.ECMA-340标准与ETSI

  • Android实现读取NFC卡的编号

    本文实例为大家分享了Android读取NFC卡的编号具体代码,供大家参考,具体内容如下 NFC相关androidManifest文件设置: 一.权限:<uses-permission android:name="android.permission.NFC"/> 二.sdk级别限制:<uses-sdk android:minSdkVersion="10"/> 三.特殊功能限制<uses-feature android:name=&quo

  • android实现通过NFC读取卡号

    本文实例为大家分享了android通过NFC读取卡号的具体代码,供大家参考,具体内容如下 1.获取权限 <uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> 2.设置NFC活动页 <intent-filt

  • Android识别NFC芯片制造商的方法

    如何识别? 通过NFC模块的Serial Number即UID,用户访问权限为R只读,每颗NFC芯片独有序列号(UID),在出厂时写入,用户不能改写. Android如何实现? 通过Intent获取UID /** * 读取nfcUID 返回String类型大写的UID * * 这个测试顺便加上的,下面用不到,做个笔记~~ * */ public static String readUID(Intent intent) throws UnsupportedEncodingException { T

  • Android识别预装的第三方App方法实例

    前言 新买一台手机,里面会有很多App,有的属于系统App,不可卸载,有的属于第三方App,厂商会预装一些常用的或者给了他们广告费的App,这些是可以卸载的. 如果要详细划分,系统App还可根据其路径不同进一步划分(如/system/app./system/priv-app./vendor/app等).但对于开发者来说,手机上安装的App只分为2类:系统App和用户App,可以根据系统API区分,这里就不详细说了,简单而言存在ApplicationInfo.FLAG_SYSTEM或Applica

  • Android 使用手机NFC的读取NFC标签数据的方法

    一 你需要准备的: 一部有nfc的手机,一张有nfc标签的卡 二 nfc简介 nfc(近距离无线通讯技术),是由非接触式射频识别(RFID)及互连互通技术整合演变而来,通过在单一芯片上集成感应式读卡器.感应式卡片和点对点通信的功能,利用移动终端实现移动支付.电子票务.门禁.移动身份识别.防伪等应用. 三 nfc过滤标签的设置 3-1 在Manifest添加权限: 在xml里添加nfc的使用权限 <uses-permission android:name="android.permissio

  • Android 指纹识别详解及实现方法

    最近项目需要使用到指纹识别的功能,查阅了相关资料后,整理成此文. 指纹识别是在Android 6.0之后新增的功能,因此在使用的时候需要先判断用户手机的系统版本是否支持指纹识别.另外,实际开发场景中,使用指纹的主要场景有两种: 纯本地使用.即用户在本地完成指纹识别后,不需要将指纹的相关信息给后台. 与后台交互.用户在本地完成指纹识别后,需要将指纹相关的信息传给后台. 由于使用指纹识别功能需要一个加密对象(CryptoObject)该对象一般是由对称加密或者非对称加密获得.上述两种开发场景的实现大

  • android 识别U盘以及读写文件的方法

    android中读写文件的需求地方很多,其中就包括了识别U盘,弹出U盘,读写U盘的文件等. 那么,如何实现这些需求呢?笔者简单的说下: 1.识别U盘: 识别U盘的方法只要是用到了2个android官方类. 它们分别为:ContentResolver和AsyncQueryHandler.表现为前者提供内容给后者读取. 作法如下: 1)获取状态并遍历 contentObserver = new ContentObserver(mHandler) { @Override public void onC

  • android中NFC读写功能的实现方法

    本文实例为大家分享了android中NFC读写功能的具体代码,供大家参考,具体内容如下 首先检查一下设备是否支持NFC功能 private void checkNFCFunction() { // TODO Auto-generated method stub mNfcAdapter = NfcAdapter.getDefaultAdapter(this); // check the NFC adapter first if (mNfcAdapter == null) { // mTextVie

  • Android编程实现自定义手势的方法详解

    本文实例讲述了Android编程实现自定义手势的方法.分享给大家供大家参考,具体如下: 之前介绍过如何在Android程序中使用手势,主要是系统默认提供的几个手势,这次介绍一下如何自定义手势,以及如何对其进行管理. 先介绍一下Android系统对手势的管理,Android系统允许应用程序把用户的手势以文件的形式保存以前,以后要使用这些手势只需要加载这个手势库文件即可,同时Android系统还提供了诸如手势识别.查找及删除等的函数接口,具体如下: 一.加载手势库文件: staticGestureL

  • .NET/C#实现识别用户访问设备的方法

    本文实例讲述了.NET/C#实现识别用户访问设备的方法.分享给大家供大家参考,具体如下: 一.需求 需要获取到用户访问网站时使用的设备,根据不同设备返回不同类型的渲染页面. 二.实现前准备 通过NuGet把UAParser程序包添加到项目中 三.实现 新建UAParseUserAgent类文件,在这个文件中进行实现. 实现代码如下: public class UAParserUserAgent { private readonly static uap.Parser s_uap; private

  • Android手动检查并申请权限方法

    Android权限一般是在AndroidManifest.xml中声明,在安装或首次使用的时候系统会自动提示用户是否提供权限 Android官方文档: Then, when the application is installed on the device, the installer determines whether or not to grant the requested permission by checking the authorities that signed the a

随机推荐