solaris上的uuid_generate_random(libuuid)

时间:2010-09-21 10:30:31

标签: c++ uuid

我有一个简单的C ++函数,它调用“uuid_generate_random”。似乎生成的UUID不符合标准(UUID版本4)。任何想法?

我正在使用的代码是(uuid_generate_random& uuid_unparse函数在libuuid中可用):

char uuidBuff[36];
uuid_t uuidGenerated;
uuid_generate_random(uuidGenerated);
uuid_unparse(uuidGenerated, uuidBuff);

我理解“uuid_generate_random”会生成UUID版本4,但是,返回的字符串如下:

Run1) 2e9dc3c5-426a-eea0-8186-f6b65b5dc361 
Run2) 112c6a78-51bc-cbbb-ae9c-92a33e1fd95f 
Run3) 5abd3d6d-0259-ce5c-8428-a51bacc04c0f 
Run4) 66a22485-7e5f-e5c2-a317-c1b295bf124f

它似乎返回整个字符串的随机字符。来自维基百科的定义,应该采用以下形式:

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,x的任何十六进制数字,但y只有8,9,A或B中的一个。

非常感谢任何输入。

此致 丹尼尔

1 个答案:

答案 0 :(得分:1)

你说libuuid似乎没有遵守国际电联的建议是完全正确的......可以说这个建议本身对于保留版本信息过于迂腐,因为除了允许technorati轻松区分UUID已经生成,但这不是重点。

好消息是,如果你愿意的话,你可以通过简单的权利,在正确的版本位中粉碎,轻松地将它们变成符合要求的UUID。 : - )