为每个设备生成唯一 ID

Posted

技术标签:

【中文标题】为每个设备生成唯一 ID【英文标题】:Generate unique id for each device 【发布时间】:2015-01-30 14:30:18 【问题描述】:

我想为每个设备生成一个唯一的 ID。目前我正在为此使用fingerprint.js。我的代码是:

var fingerprint = new Fingerprint().get();

但我想在不使用任何插件的情况下生成唯一 ID。任何人都可以帮助我吗?

【问题讨论】:

Create GUID / UUID in javascript? 的可能重复项 请不要重复这个,因为我想一直生成唯一的 id。这里提到的问题总是生成唯一的id,但生成的id不会一直相同。我一直想要相同的 id。 请看我编辑的答案。也许它会帮助你。 谢谢你,不管怎样,我得到的答案与我期望的有点相似。 cud你请看看那个。 问题总结:我正在使用开源项目fingerprintjs 来生成指纹,但是我想在没有这个库的情况下做到这一点......怎么做?阅读图书馆怎么样......或者更好,只是使用它?您自己尝试这样做很可能不会那么好(特别是因为您需要在这里询问它是如何完成的) 【参考方案1】:

朋友们,

我终于找到了答案。此代码将始终为每个设备(在浏览器中)生成唯一 ID。但是如果应用程序在不同的浏览器但在相同的设备中打开,这个 ID 也会生成一个新的 ID。 uid 是生成的唯一标识。

var navigator_info = window.navigator;
var screen_info = window.screen;
var uid = navigator_info.mimeTypes.length;
uid += navigator_info.userAgent.replace(/\D+/g, '');
uid += navigator_info.plugins.length;
uid += screen_info.height || '';
uid += screen_info.width || '';
uid += screen_info.pixelDepth || '';
console.log(uid);

感谢大家对我的支持。

【讨论】:

每个设备的这个常数如何?如果安装了新插件怎么办?或者你连接不同的显示器? 它会改变的。我知道这不是一个完美的解决方案。在“在 JavaScript 中创建 GUID/UUID?”的情况下,ID 将在每次重新加载时更改。但我不想在每次重新加载时更改它。因此我问了这个问题。比这个解决方案完美的解决方案真的很可观。 您是否考虑过创建 GUID 并将其存储在某处(例如 cookie 或 localStorage)? 我避免使用 cookie,因为它可以被刷新。此外,此代码是跨浏览器跟踪项目的一部分,我们正在实施确定性方法来跟踪设备。更多信息请查看***.com/questions/27148646/… 如果你在两个不同的设备上使用相同的型号、操作系统和浏览器运行它,那么它会为两者返回相同的 UID!【参考方案2】:

例如这样:

function generateUUID()
    var d = new Date().getTime();
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) 
        var r = (d + Math.random()*16)%16 | 0;
        d = Math.floor(d/16);
        return (c=='x' ? r : (r&0x3|0x8)).toString(16);
    );
    return uuid;
;

更多主题:Create GUID / UUID in JavaScript?

编辑: 在您说的评论中,您希望随时为每个设备生成相同的 id。对于此类任务,构建哈希是一种方法。获取您设备的任何属性/属性,这是该设备独有的(无论是什么,都很难说没有例子)。比用它们构建一个哈希,例如:

var uniqueId = someHashFunction(device.property1 + device.property2 + ...);

互联网上有很多散列函数,例如,您可以看看这个:http://phpjs.org/functions/md5/ 这将为给定属性返回一个唯一值。

【讨论】:

【参考方案3】:

对于节点用户,此包有助于生成唯一 ID 安装:

npm i node-machine-id

代码:

import machineId, machineIdSync from 'node-machine-id';
 
// Asyncronous call with async/await or Promise
 
async function getMachineId() 
    let id = await machineId();
    ...

 
machineId().then((id) => 
    ...
)
 
// Syncronous call
 
let id = machineIdSync()
// id = c24b0fe51856497eebb6a2bfcd120247aac0d6334d670bb92e09a00ce8169365
let id = machineIdSync(original: true)
// id = 98912984-c4e9-5ceb-8000-03882a0485e4

【讨论】:

【参考方案4】:

您可以使用时间戳作为唯一 ID,并向其附加一些静态文本:

var uniqueID = "ID-"+(new Date()).getTime().toString();

【讨论】:

以上是关于为每个设备生成唯一 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Objective-c 为 iPhone/iPad 生成设备的唯一 ID

如何生成唯一的Android设备ID

如何为每位新访客创建唯一ID?

在 redux 应用程序中,在哪里为实体生成唯一 ID?

C ++生成唯一ID [重复]

通过 PHP 对移动设备进行唯一但持续的标识