关于UUID4的构成问题,根据维基百科.
版本4 UUID的形式为xxxxxxxx-xxxx-4 yxxx yxxx-xxxxxxxx,其中x是任何十六进制数字,y是8、9、A或B之一。
因此,我可以想到三种可能的方法,程序员可以使用这些方法生成随机的UUID4:
( MethodA)使用已经存在的“适当”UUID4生成库.
-或者-
( MethodB)只需在string:上使用一个随机的十六进制字符就可以自行滚动。
上面的步骤只是一个简单的例子,说明了如何将其作为字符串来完成。请考虑对字符串进行操作并随机选择十六进制字符的任何其他方法仍然是"MethodB",例如,从空字符串开始,每次追加一个字符。
-或者-
MethodC:按位操作的滚动操作:
我想大多数图书馆都是这样做的吧?使用大多数随机位,同时确保"4“和"8/9/a/b”处于最后生成的字符串中。
问题:
Q1:从技术上讲,在生成的 UUIDv4中是否存在任何差异,这些差异将根据它们的随机性或与数据库的一般兼容性,等等来存储UUIDv4?
Q2:对#1或#3 (按位)使用方法2(随机十六进制字符)有什么缺点吗?
Q3:除了MethodB和MethodC中的简单方法之外,MethodA中的“适当”UUIDv4生成库做了什么特别的事情吗?
Q4:有什么方法更像是遇到冲突吗?
Q5:由MethodB + MethodC生成的生成的UUID是否完全符合UUIDv4规范(即使它们在实现方法上不兼容)。
备注:
发布于 2016-04-10 06:26:57
Q1:从技术上讲,生成的UUIDv4在随机性或与数据库的一般兼容性等方面是否存在差异,这些差异将存储UUIDv4?
严格来说没什么区别。
Q2:对#1或#3 (按位)使用方法2(随机十六进制字符)有什么缺点吗?
没有缺点;不完全是。
Q3:除了MethodB和MethodC中的简单方法之外,MethodA中的“适当”UUIDv4生成库做了什么特别的事情吗?
库一般都是按照MethodC的意思做的
Q4:有什么方法更像是遇到冲突吗?
不怎么有意思。
Q5: MethodB + MethodC生成的UUID是否完全符合UUIDv4规范(即使它们在实现方法上不兼容)。
是。
成功生成(RFC 4122变体)版本4 UUID并不复杂,但需要对随机数生成有一定的了解。例如,“伪随机”数字生成与“密码”质量随机数生成之间的区别。
例如,一个非常简单的“伪随机”数字生成器通常会产生与“随机”数相同的序列;这常常足以使“种子”被引入来改变随机数序列。
当然,每次调用UUID生成器时生成相同的UUID也很烦人。因此,“伪随机”数字生成器对于生成UUID来说并不理想。
"Crypto“质量的随机数可能要随机得多,并且被大多数UUID版本4生成器使用。
简而言之,最好的UUID版本4生成器是基于最佳随机数生成器的生成器。RFC 4122的4.4节给出了如何实现UUID 4随机性更高程度的建议。
有一个梳状UUID是从RFC 4122变体派生出来的,您可能会感兴趣。
-奖励:您可能需要查看Mahonri Moriancumer的UUID和GUID发生器和法医页面。它使用加密质量的随机数生成器生成版本4的UUID。
https://stackoverflow.com/questions/36400040
复制相似问题