Javascript 重复执行程序是否会增加唯一ID冲突的机会

Javascript 重复执行程序是否会增加唯一ID冲突的机会,javascript,random,uuid,nanoid,Javascript,Random,Uuid,Nanoid,我知道像UUID和nanoid这样的独特id生成器的要点是碰撞在很长很长时间内都不会发生。但随后重新执行一项计划会增加机会吗 例如: (我对RNG或UUID了解不多,因此这可能不能完全反映流程,但这个示例将解释我为什么要问这个问题) 第一次执行:使用种子0初始化了nanoid。它将产生的ID链将是A、B、C、D……等等。在这个特定的链中,我们很长一段时间内都不会再看到A,B,C,所以在这个程序执行过程中,没有什么好担心的 后续执行:使用种子0初始化nanoid将是一个明显的问题,但即使它不相同,

我知道像UUID和nanoid这样的独特id生成器的要点是碰撞在很长很长时间内都不会发生。但随后重新执行一项计划会增加机会吗

例如: (我对RNG或UUID了解不多,因此这可能不能完全反映流程,但这个示例将解释我为什么要问这个问题)

第一次执行:使用种子0初始化了nanoid。它将产生的ID链将是A、B、C、D……等等。在这个特定的链中,我们很长一段时间内都不会再看到A,B,C,所以在这个程序执行过程中,没有什么好担心的

后续执行:使用种子0初始化nanoid将是一个明显的问题,但即使它不相同,我假设从种子生成的元素不是该种子唯一的

  • 种子0->A、B、C、D
  • 种子1->W,X,Y,Z….A…B,C
因此,即使选择了不同的种子,在某个点上仍有可能达到相同的ID


我的想法对吗?这值得担心吗?

回答标题中的问题:也许,也许不

这取决于某些事情:

  • 程序是否检查生成的ID的唯一性
  • 程序是否从固定种子开始生成ID
  • ID中使用了哪些类型的数字?它们是伪随机数吗?它们是时间戳吗?它们是序列号吗?它们是由加密RNG生成的吗
  • 如果数字是伪随机的,程序如何初始化PRNG?有固定的种子?用粗糙的时间戳?有高分辨率的时间戳吗?使用加密随机数

碰撞是否值得担心?如果您的应用程序不能容忍程序生成重复ID的风险,那么可能是这样。

这取决于您如何生成UUID。