NodeJS uuid v1是否存在浏览器兼容性问题?

0lvr5msh  于 2022-11-29  发布在  Node.js
关注(0)|答案(1)|浏览(213)

我查了一下,uuid version1是根据时间戳和MAC地址生成的,是不是浏览器兼容性问题,比如有些浏览器无法获取MAC地址。
我现在在javaScript项目中使用一个名为uuid的npm包。
我现在用的是v4版本,但是有重复的可能,希望可以更换一个版本的uuid生成算法。
这是我的代码:

import { v1 as uuidv1 } from 'uuid'; 
const uuid = () => {
  return uuidv1()
}
5rgfhyps

5rgfhyps1#

这是不可能的。从浏览器读取系统接口的mac地址是不可能的。至少用标准的API是不可能的。那将是一场隐私噩梦。
检查uuid的实现(或您打算使用的任何软件包),您会发现它们不会使用MAC地址作为版本1的UUID--只是因为不可能从浏览器获得此类信息。
维基百科指出:
版本1 UUID由时间和节点ID**(通常为MAC地址)**生成
(强调我)
所以节点ID通常是一个mac地址。虽然wikipedia不是生成UUID的权威来源,但我认为我们可以安全地假设这是事实(节点ID通常是mac地址)。
查看uuid包的源代码:

// node and clockseq need to be initialized to random values if they're not
  // specified.  We do this lazily to minimize issues related to insufficient
  // system entropy.  See #189
  if (node == null || clockseq == null) {
    const seedBytes = options.random || (options.rng || rng)();

    if (node == null) {
      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
      node = _nodeId = [
        seedBytes[0] | 0x01,
        seedBytes[1],
        seedBytes[2],
        seedBytes[3],
        seedBytes[4],
        seedBytes[5],
      ];
    }

  // later in the source code ...

  // `node`
  for (let n = 0; n < 6; ++n) {
    b[i + n] = node[n];
  }

我们可以看到,uuid包只是使用了一个随机值作为mac地址。

相关问题