锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Android实现NFC芯片制造商识别

时间:2023-03-03 23:00:00 balluff振动传感器bdg

如何识别?

通过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 { 
              /** * 用于输出16进制字符的小写字符数组 */     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 true 传换成小写格式 , false 传换成大写格式 * @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(

相关文章