是否可以设计我们自己的算法来创建唯一的GUID?

时间:2010-05-04 11:44:01

标签: algorithm winapi guid

GUID由数字和字符与连字符的组合生成。

例如){7B156C47-05BC-4eb9-900E-89966AD1430D}

在Visual Studio中,我们使用“创建GUID”工具来创建它。我希望可以通过窗口API以编程方式创建相同的内容。

如何使GUID独一无二?为什么他们不使用任何特殊字符,如#,^ etc ......

是否可以设计我们自己的算法来创建唯一的GUID?

5 个答案:

答案 0 :(得分:3)

是的,有可能,但你不应该在没有充分理由的情况下重新发明轮子。通过在两个不同的情况下包含(统计学上说)不太可能相同的元素,使GUID变得独特,例如:

  • 当前时间戳
  • 系统更新
  • 系统的MAC地址
  • 随机数
  • ...

另外,如果您从零开始实施GUID,请考虑其隐私含义,因为它们包含一些人认为敏感的上述数据。

答案 1 :(得分:3)

UUID定义为例如在http://www.faqs.org/rfcs/rfc4122.html。使用您自己的算法生成类似UUID的问题的一个问题是您可能会与其他人的UUID发生冲突。因此,如果可能的话,你绝对应该使用别人的实现,如果没有,你可以编写自己的标准算法实现。

答案 2 :(得分:1)

回答这个问题:为什么他们不使用#,^等任何特殊字符。

它应该是128位整数。所以常见的表示是简单的32个十六进制。

你也可以创建使用128个1和0等字符。

关于问题的其余部分,wiki有很好的答案。

答案 3 :(得分:1)

您应该通过调用为其设计的API来创建新的GUID。在原生的窗户土地上 CoCreateGUID;在.NET中它是System.Guid.NewGuid();

答案 4 :(得分:0)

是的,虽然更容易利用别人的,例如Boost uuid