Random 区别于;UUIDv4代图书馆“-vs-“;只需使用随机的十六进制字符或位来滚动您自己的;

Random 区别于;UUIDv4代图书馆“-vs-“;只需使用随机的十六进制字符或位来滚动您自己的;,random,hex,bit-manipulation,uuid,entropy,Random,Hex,Bit Manipulation,Uuid,Entropy,关于UUID4的组成主题,根据 版本4 UUID的格式为xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxx 其中x是任意十六进制数字,y是8、9、A或B中的一个 因此,我可以想到程序员可以使用三种可能的方法来生成随机UUID4: 方法a)使用已经存在的“适当”UUID4生成库。 -或 MethodB)只需在字符串上使用随机十六进制字符即可滚动自己的字符串: 以字符串“xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxx”开头 将“x”字符替换为随机十六进制字符(

关于UUID4的组成主题,根据

版本4 UUID的格式为xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxx 其中x是任意十六进制数字,y是8、9、A或B中的一个

因此,我可以想到程序员可以使用三种可能的方法来生成随机UUID4:

方法a)使用已经存在的“适当”UUID4生成库。

-或

MethodB)只需在字符串上使用随机十六进制字符即可滚动自己的字符串:

  • 以字符串“xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxx”开头
  • 将“x”字符替换为随机十六进制字符(0-9a-f)
  • 将“y”替换为以下任一项:8 9 a b
以上步骤只是一个简单的示例,说明了如何将其作为字符串来完成。请考虑在字符串和随机选择的十六进制字符上运行的任何其他方法,仍然是“方法B”,例如从空字符串开始,一次附加一个字符。 -或-

MethodC:使用按位操作滚动您自己的方法:

我想大多数图书馆都是这样做的?主要使用随机位,同时确保“4”和“8/9/a/b”在最终生成的字符串中

问题:

问题1:产生的UUIDv4在随机性或与存储UUIDv4的数据库等的一般兼容性方面在技术上是否存在任何差异

问题2:在#1或#3(按位)上使用方法#2(随机十六进制字符)有什么缺点吗

问题3:除了MethodB和MethodC中的简单方法之外,MethodA中“合适的”UUIDv4生成库是否还做了什么特别的工作

问题4:有什么方法更容易发生冲突吗

问题5:MethodB+MethodC生成的结果UUID是否完全符合UUIDv4规范(即使它们不符合实现该规范的方法)

注:

  • 此问题仅适用于UUID版本4
  • 显然,仅仅使用一个库更容易,我只是想问的是生成的UUIDv4结果的差异,而不是程序员投入的工作量
  • 对于上述问题,我并不真正关心性能。但如果你对此也有任何评论,那可能也很有趣。我认为这些库的性能更好
问题1:在技术上,产生的UUIDv4是否存在任何差异 将根据其随机性或一般性生成 是否与存储UUIDv4的数据库等兼容

从技术上讲,没有区别

问题2:使用方法2(随机十六进制字符)有什么缺点吗 超过#1或#3(按位)

没有缺点;不是真的

问题3:MethodA中的UUIDv4生成库是否“合适” 除了MethodB中的简单方法和 MethodC会这么做吗

库通常完全按照MethodC的意思执行

问题4:有什么方法更容易发生冲突吗

不是真的

问题5:MethodB+MethodC生成的UUID是否完全正确 符合UUIDv4规范(即使它们不是 遵守他们的方法以达到目标)

成功生成(RFC 4122变体)版本4 UUID并不复杂;但需要对随机数生成有一些了解。例如,“伪随机”数生成与“加密”质量随机数生成之间的差异

例如,一个非常简单的“伪随机”数字生成器通常会产生相同的“随机”数字序列;这通常非常恼人,以至于可以引入“种子”来改变随机数序列

当然,每次调用UUID生成器时生成相同的UUID也很烦人。因此,“伪随机”数字生成器并不适合生成UUID

“加密”质量的随机数可能更随机,并且被大多数UUID版本4生成器使用

简而言之,最好的UUID版本4生成器是基于最好的随机数生成器的生成器。第4.4节给出了如何实现更高程度的UUID版本4随机性的建议

您可能会感兴趣的是从RFC 4122变体派生的一个

--
奖励:您可能想要签出页面。它使用加密质量随机数生成器生成版本4 UUID

这里的问题到底是什么?Stack Overflow不是一个讨论网站,因此,如果您希望开始讨论使用自己的guid创建方法的优缺点,那么问题就解决了。似乎如果您使用一个好的随机源,那么应该没有任何区别。由于实际创建没有指定,除了随机之外,任何随机生成都应该遵循规范。问题的关键是“结果中的技术差异是什么”和“如果我不使用库,我会遇到什么问题”。我不是在征求意见或赞成/反对意见。我在询问技术事实。我非常感谢你不要将问题的措辞错误地解释为“征求意见”,而事实并非如此。我花了大约一个小时来写它,试图弄清楚这是一个有对有错答案的技术问题。在许多情况下,如果句子稍作修改,问题就不会被删除。