如何在javascript中生成唯一ID? [复制]

Posted

技术标签:

【中文标题】如何在javascript中生成唯一ID? [复制]【英文标题】:How to generate unique id in javascript? [duplicate] 【发布时间】:2016-08-21 10:56:04 【问题描述】:

我想记录网站的流量。在每次点击时,我都想生成将存储在数据库中的唯一 ID。 为了生成唯一的 ID,我在下面的代码中编写了代码,但有时我在数据库中得到了相同的条目。

 timingVar = 'load_'+Date.now()+'_'+uniqueid();

//function used to generate unique number//
function uniqueid() 
    var ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var ID_LENGTH = 8;
    var rtn = '';
    for (var i = 0; i < ID_LENGTH; i++) 
      rtn += ALPHABET.charAt(Math.floor(Math.random() * ALPHABET.length));
    
    return rtn;

【问题讨论】:

如果您在服务器上生成此 ID,这将更合适。为每个用户设置一个会话,如果该用户第二次来,则记录它。 我必须使用 java 脚本来获取唯一 ID,我的代码有什么问题。我的代码会产生重​​复的 id 吗? 您的代码的问题在于它不能防止重复,并且没有足够大的随机字段。这就是为什么我们拥有强大的 UUID 算法。 36 ^ 8 远远不足以期望从中随机选择是唯一的,尤其是。在浏览器中使用不完美的伪随机数生成器时不会。 @PraveenD 没有更多信息,这可能不是您的唯一 ID 代码,而是您如何使用它。您的 id 中有Date.now,所以需要同时发出两个请求并获得相同的随机数?不太可能(但可能这就是为什么您应该查看 TJCrowder 的链接)。 但是我想你会发现即使你有一个真正唯一的 ID,你仍然会在数据库中得到重复的 ID。即这是另一个XY 问题。你也记录IP地址吗?是否来自同一 IP 的重复项?最重要的是,您的timingVar 是全球性的吗? (如问题中所述)。 本质上,我是说您可能会在发送它之前覆盖您的timingVar,因此第一次调用会获得第二次调用的值,而您会得到一个副本。这可能是由全局变量或对闭包的误解引起的。没有你所有的代码,是不可能确定的。 【参考方案1】:

可以将数据库配置为对列使用自动生成的唯一值(主要是序列号)。您不必依赖客户端上的 javascript 来执行此操作。

【讨论】:

这里我想从 JavaScript 本身生成唯一的 id。我的代码有什么问题?

以上是关于如何在javascript中生成唯一ID? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dart 中生成唯一 id

如何在本机反应中生成唯一ID

如何在 Sails.js 中生成唯一的发票 ID

在 php 中生成唯一 id(用于 url 缩短器)

如何在 Postgres 9.6+ 中生成长度为 N 的随机、唯一的字母数字 ID?

通过Zookeeper学习在分布式系统中生成全局唯一ID