为每个设备生成唯一 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的主要内容,如果未能解决你的问题,请参考以下文章