首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js获取手机唯一

在JavaScript中,获取手机的唯一标识符(Unique Identifier)是一个常见的需求,但也是一个复杂且敏感的问题。由于隐私和安全的原因,浏览器对于直接访问设备的硬件标识符(如IMEI、MAC地址等)有着严格的限制。以下是一些常见的方法和它们的特点:

1. 使用localStoragecookies

可以通过在用户首次访问时生成一个唯一的标识符,并将其存储在localStoragecookies中,以便后续访问时使用。

优点

  • 简单易实现。
  • 不需要访问设备硬件。

缺点

  • 用户可以清除localStoragecookies,导致标识符丢失。
  • 不同浏览器或设备之间不共享。

示例代码

代码语言:txt
复制
function getDeviceUUID() {
    let uuid = localStorage.getItem('device_uuid');
    if (!uuid) {
        uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
        localStorage.setItem('device_uuid', uuid);
    }
    return uuid;
}

console.log(getDeviceUUID());

2. 使用Canvas指纹识别

通过绘制一个隐藏的Canvas元素并读取其哈希值,可以生成一个相对唯一的标识符。

优点

  • 不依赖于存储。
  • 难以被用户清除。

缺点

  • 可能会受到浏览器渲染差异的影响。
  • 隐私问题,可能会被用户阻止。

示例代码

代码语言:txt
复制
function getCanvasFingerprint() {
    const canvas = document.createElement('canvas');
    const ctx = canvas.getContext('2d');
    ctx.font = '18pt Arial';
    ctx.fillText('Hello, world!', 2, 15);
    return canvas.toDataURL('image/png');
}

console.log(getCanvasFingerprint());

3. 使用WebRTC获取本地IP地址

通过WebRTC技术可以获取用户的本地IP地址,但这并不保证唯一性,且用户可能会拒绝共享。

优点

  • 可以获取到用户的本地网络信息。

缺点

  • 用户可能会拒绝共享。
  • 不同设备或网络环境下IP地址会变化。

示例代码

代码语言:txt
复制
function getLocalIPs(callback) {
    const RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
    const ips = {};

    if (!RTCPeerConnection) {
        callback(ips);
        return;
    }

    const rtc = new RTCPeerConnection({ iceServers: [] });
    rtc.createDataChannel('', { reliable: false });

    rtc.onicecandidate = function (ice) {
        if (ice.candidate) {
            const ipMatch = /([0-9]{1,3}(\.[0-9]{1,3}){3})/.exec(ice.candidate.candidate);
            if (ipMatch) {
                ips[ipMatch[1]] = true;
                callback(ips);
            }
        }
    };

    rtc.createOffer().then(offer => rtc.setLocalDescription(offer));
}

getLocalIPs(function (ips) {
    console.log(ips);
});

4. 使用FingerprintJS

FingerprintJS是一个开源库,可以通过多种浏览器特征生成一个相对唯一的标识符。

优点

  • 综合多种特征,唯一性较高。
  • 易于使用。

缺点

  • 仍然可能受到用户隐私设置的影响。

示例代码

代码语言:txt
复制
<script src="https://cdn.jsdelivr.net/npm/@fingerprintjs/fingerprintjs@3/dist/fp.min.js"></script>
<script>
  FingerprintJS.load().then(fp => {
    fp.get().then(result => {
      console.log(result.visitorId);
    });
  });
</script>

总结

每种方法都有其优缺点,选择哪种方法取决于具体的应用场景和对隐私的要求。需要注意的是,任何试图获取用户设备唯一标识符的行为都应遵守相关的隐私法规,并尊重用户的隐私权。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

获取UUID_js获取用户唯一标识

需求: ​ 很多时候我们会需要用到 生成不重复的唯一标识的 的功能,如数据库表中的主键等。 实现: ​ 使用UUID生成 唯一、不重复 的字符串。...(Universally Unique Identifier),UUID出现的目的,是为了让分布式系统可以不借助中心节点,就可以生成UUID来标识一些唯一的信息。...目前最广泛应用的UUID,是微软公司微软公司的全局唯一标识符(GUID)。 UUID在发展过程中,为了适应不同的需要,产生了5个版本: uuid1: 基于时间戳、机器MAC地址生成。...由于使用MAC地址,可以保证全球范围的唯一性。 uuid2: 只基于时间戳,不常用。 uuid3: 基于namespace和一个自定义字符串,不常用。...(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

3.9K20
  • 微信小程序 获取手机号 JS

    当我们在开发微信小程序中,有一个常用的功能,就是获取用户的手机号,然后一键登入小程序,那么手机号如何获取呢?请认真看完本文,保证可以获取到用户的手机号。...后来想想,微信获取用户的手机号一样可以保证手机号码的真实性,因为手机号既然可以绑定微信,那么肯定是被严格核验过的,然后就开始了获取手机号之旅,网上教程有很多,但不知什么原因,都是会少一些内容,有的只有前端代码...---- 首先我们可以去看一看官方文档,获取手机号大致分为以下四步: 第1步:使用wx.login接口获取code(临时数据) 第2步:使用第一步的code,获取session_key和openid(确认用户唯一的数据...我们可以提炼出下面几条关键信息: 只能由非个人的小程序才能获取用户手机号。 获取手机号必须由button按钮组件触发,而不能写在onLoad()内自动获取。 需在必要的情况下使用。...是唯一的。

    1.2K30

    android获取设备唯一标示

    DEVICE_ID 这是Android系统为开发者提供的用于标识手机设备的串号,也是各种方法中普适性较高的,可以说几乎所有的设备都可以返回这个串号,并且唯一性良好。...                        ex.printStackTrace();                 }                 return macSerial;         } Android 手机上获取物理唯一标识码...: 非手机设备: 如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个DEVICE_ID 权限: 获取DEVICE_ID需要READ_PHONE_STATE权限,但如果我们只为了获取它...Serial Number 在Android 2.3可以通过android.os.Build.SERIAL获取,非手机设备可以通过该接口获取。         4....Android手机的唯一标识?

    7K70

    移动设备(手机)的唯一ID详解

    移动设备(手机)的唯一ID有哪些 在移动广告领域,设备的ID 是用来追踪一个人的最重要的标识。...2、Andriod体系下:可以获取 Andriod的手机设备是允许开发者获取IMEI号的,但在Andriod6.0以后版本需要得到用户的主动授权才能获取。...二、IDFA 苹果和Google针对移动设备推出的 广告标识符 1、IOS体系下:可以获取 在IOS6.0以后版本均可以正常获取IDFA,但手机用户可以手动还原 以及 手动禁止获取(手动关闭广告追踪,...但是Google的这个IDFA是需要基于Google Play等基础APP的,在国内环境下,Google的这些基础APP要么无法访问使用,要么被手机厂商直接去掉了,因此Android手机上的IDFA在国内没有起到唯一...2、Andriod体系下:可以获取 APP的开发者可以主动获取当前Andriod手机的MAC地址,另外 如果是通过 WIFI上网 或者 WIFI AP 探针 也都可以获取到当前设备的MAC地址。

    5.1K20

    手机卫士手机实现短信指令获取位置

    获取位置 新建一个service的包 新建一个GPSService类继承系统的Service类 清单文件中注册一下 重写onCreate()方法,服务创建的时候回调 重写onDestroy()方法,服务销毁的时候回调...把上一节的代码拿到这个地方来 得到用户移动后的最后一次的位置,保存到SP中 转换标准坐标为火星坐标,数据库文件放到assets目录下,把ModifyOffset.java放在service包下面 获取...PonitDouble对象的y 获取到纬度 PonitDouble对象的x 把位置数据保存到SP中 接收指令发送位置短信 启动服务,在接收短信的地方,获取到Intent对象,调用Context对象的...(目标手机, null(来源手机不支持), text, sentIntent, deliveryIntent)后两个参数,延迟报告和送达报告,不关心填null 需要这个权限 android.permission.SEND_SMS...判断一下内容是否为空,如果为空发送短信内容是正在获取,手动让坐标变化一下,才能正在得到 GPSService.java package com.qingguow.mobilesafe.service;

    1.8K20

    示例讲字典(Dictionary):获取唯一值

    标签:VBA,Dictionary 字典(Dictionary)是一种通过键(key)和项(item)(注:键和项是字典中的术语)存储唯一项的方法。...这里,将存储一个10行的单元格区域,然后只输出该区域中唯一的项目。 示例如下图1所示。获取其数据区域,使用字典将数据存储,然后使用VBA数组提取我们选择需要获取唯一值的列。...图2 下面的VBA代码从数据单元格区域中生成唯一数据。它将从数组的当前区域获取数据,并将数据汇总到一个唯一值列表中,输出到所选择的单元格区域内。....Item行允许引用数组(ar),并将唯一数据放入字典中。...图3 如果想要输出不同列的唯一值,可以使用代码。

    4.9K50

    移动设备(手机)的唯一ID有哪些

    既然移动设备ID 如此的重要,那我们就来聊一聊,有哪些ID我们是可以使用的: 一、IMEI IMEI是国际移动设备识别码,一串15位的号码,每部通过正规渠道销售的GSM手机均有唯一的IMEI码。...2、Andriod体系下:可以获取 Andriod的手机设备是允许开发者获取IMEI号的,但在Andriod6.0以后版本需要得到用户的主动授权才能获取。...二、IDFA 苹果和Google针对移动设备推出的 广告标识符 1、IOS体系下:可以获取 在IOS6.0以后版本均可以正常获取IDFA,但手机用户可以手动还原 以及 手动禁止获取(手动关闭广告追踪,...但是Google的这个IDFA是需要基于Google Play等基础APP的,在国内环境下,Google的这些基础APP要么无法访问使用,要么被手机厂商直接去掉了,因此Android手机上的IDFA在国内没有起到唯一...2、Andriod体系下:可以获取 APP的开发者可以主动获取当前Andriod手机的MAC地址,另外 如果是通过 WIFI上网 或者 WIFI AP 探针 也都可以获取到当前设备的MAC地址。

    1.9K20

    Charles获取手机HTTPS请求

    这里详细的讲下使用Charles工具抓取手机端的HTTPS的请求配置。...让手机和电脑连接同一个网络,查询电脑的IP地址(ipconfig),查询出来后,在手机端配置代理,见如下: ? 手机端设置代理成功后,Charles就会弹出一个框,直接点击允许。...打开手机的浏览器,输入http://charlesproxy/getssl按下回车键后,跳转到一个新的地址,提示是否允许,点击允许,见如下所示: ? 点击允许后,跳转到一个安装描述文件,见如图: ?...下来设置信任证书,在苹果手机中,点击设置-->通用-->关于手机-->证书信任设置,点击后,见图: ? 点击信任证书,会弹出框,见图: ? 点击继续按钮,证书设置信任完成。...至此,抓取手机上HTTPS的请求配置完成。 在网易云课堂,搜索无涯 接口自动化测试,在手机上操作,在Charles就可以抓取到搜索的请求,见图: ? 再见服务端返回的响应数据: ?

    2.2K20

    Charles获取手机HTTPS请求

    这里详细的讲下使用Charles工具抓取手机端的HTTPS的请求配置。...让手机和电脑连接同一个网络,查询电脑的IP地址(ipconfig),查询出来后,在手机端配置代理,见如下: ? 手机端设置代理成功后,Charles就会弹出一个框,直接点击允许。...打开手机的浏览器,输入http://charlesproxy/getssl按下回车键后,跳转到一个新的地址,提示是否允许,点击允许,见如下所示: ? 点击允许后,跳转到一个安装描述文件,见如图: ?...下来设置信任证书,在苹果手机中,点击设置-->通用-->关于手机-->证书信任设置,点击后,见图: ? 点击信任证书,会弹出框,见图: ? 点击继续按钮,证书设置信任完成。...至此,抓取手机上HTTPS的请求配置完成。 在网易云课堂,搜索无涯 接口自动化测试,在手机上操作,在Charles就可以抓取到搜索的请求,见图: ? 再见服务端返回的响应数据: ?

    2.5K50

    各种获取设备唯一标识的方法介绍

    //现在苹果对隐私方面很严 很难获取一种较好的设备唯一标识符方法,下面几篇博文仅做参考: 使用UUID作为手机唯一标识符在app删除并重新安装后会重新生成。...]<=0) { str = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; // 保存UUID作为手机唯一标识符...iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。...所以IDFA也不可以作为获取唯一标识的方法,来识别用户。...需要将唯一标示保存到KeyChain中,这样即便是应用卸载了,然后用户在安装也是获取到的唯一的UUID。

    3.5K20

    获取手机短信内容

    原理是通过,contentprovider获取系统短信数据库中的字段信息而达到获取内容目的 效果图如下: 具体代码如下: package com.internal.message;   import...android.R.id.text1,android.R.id.text2});           setListAdapter(adapter);       }       /**        * 获取手机内所以短消息...,所以我改用下面的方法获取   name=getPeopleNameFromPerson(phoneNumber);   smsbody = cur.getString(smsbodyColumn)...SQLiteException in getSmsInPhone", ex.getMessage());              }          }        /**        * 通过address手机号关联...Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, address);  // address 手机号过滤

    3.3K80

    iphone手机获取不了软件_手机uuid什么意思

    下面我们将介绍六种获取UDID的方法: 一、用iTunes获取 1:手机连接电脑,打开iTunes软件,点击序列号字母处 2:显示UDID 3:点击鼠标右键拷贝即可 二、...通过第三方工具iTools获取 1:手机连接电脑,打开iTools软件,点击更多 2:出现设备标识即为手机的UDID,单击复制即可 三、通过第三方工具PP助手获取 1:手机连接电脑...四、通过IDE工具Xcode获取 1:手机连接电脑,点击设备显示出 2:在展开的设备列表中点击添加模拟器的选项 3:此时弹出窗口显示的Identifier即为手机的UDID,复制即可...五、通过蒲公英给的地址获取 https://www.pgyer.com/udid。...用Safari打开上面的地址,或出现下面的页面 点击获取UDID的绿色按钮, 点击右上角的安装按钮 输入手机密码 点击安装,就会有页面,里面的那个长串就是我们需要的UDID了 这时候

    2.3K20
    领券