2010-09-21 67 views
3

我有一個調用「uuid_generate_random」的簡單C++函數。看起來生成的UUID不符合標準(UUID版本4)。有任何想法嗎?solaris上的uuid_generate_random(libuuid)

我使用的代碼是(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

你是相當正確的,libuuid似乎並沒有被遵守ITU推薦......可以這樣說,該建議本身過於迂腐關於保留的版本信息,因爲它提供小除了允許Technorati輕鬆地區分UUID的生成方式以外,還有其他目的。

好消息是,如果你關心,你可以很容易地通過簡單的粉碎方式將這些變成符合UUID的合適版本位。 :-)

+0

感謝您的快速回復!我正在考慮「粉碎」版本位......有點破解,但...... – Daniel 2010-09-21 10:59:09