2017-09-05 38 views
5

为什么在这台计算机生成的每个GUID的中间,我们可以看到一个4?总是等号的GUID

enter image description here

+4

一个简单的谷歌搜索返回:'位数M的四位表示UUID version' HTTPS: //en.wikipedia.org/wiki/Universally_Unique_Identifier –

+0

嗯,这是一个特殊的事情,我把它与机器相关 –

+0

这就是为什么GUID不应该被用作随机数字。好的,版本4的GUID(它们是)大多是随机比特,但其中一些比特是固定的,以符合RFC 4122的规定。如果需要128个随机比特,只需使用合适的随机数发生器。 –

回答

7

GUID算法版本(4你的情况):

https://en.wikipedia.org/wiki/Universally_unique_identifier

在它的规范的文本表示,一个UUID 的16个八比特组表示为32十六进制(基数为16)数字,显示在由连字符分隔的5个 组中,格式为8-4- 4-4-12,总共36个 个字符(32个字母数字字符和4个连字符)。例如:

123e4567-e89b-12d3-a456-426655440000 
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx 

位M的四个位指示UUID版本和的数字n的一至 三个最显著位指示UUID变体。在 示例中,M是1并且N是(10xx),这意味着UUID是变体1的版本1UUID的 ;即基于时间的DCE/RFC 4122 UUID。

+0

我会接受这个答案,我可能有一个愚蠢的问题,为什么他们把字符 - 而不是统一一切? –

+0

@Marco Salerno:对不起,我不关注你:UUID是* 128位数字*,它可以在* xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx中表示为一个字符串*。第三块 - “Mxxx”实际上是十六进制表示中的16位整数*。顶* 4位* - 'M'是版本(所以我们可以在0..15范围内)。我在这里看不到任何* char * –

+0

我的意思是,为什么当它被呈现为一个字符串时,他们会将块分割为 - ? –

1

这是由于正在使用的版本GUID/UUID's;

一些好的信息可以发现here,但basicly这些版本4,使用以下格式:

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx