uuid_generate_random (libuuid) в солярисе - PullRequest
3 голосов
/ 21 сентября 2010

У меня есть простая функция 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, но только одной из 8, 9, A или B для y.

Любая информация будет принята с благодарностью.

С уважением, Даниил

1 Ответ

1 голос
/ 21 сентября 2010

Вы совершенно правы, что libuuid, по-видимому, не придерживается рекомендации МСЭ ... Можно утверждать, что сама рекомендация слишком педантична в отношении сохранения информации о версии, поскольку она служит малой цели, помимо того, что Technorati легко может определить, как UUID был сгенерирован, но это не относится к делу.

Хорошая новость заключается в том, что, если вам интересно, вы можете легко превратить их в соответствующие UUID с помощью простого способа разбить нужные биты версии. : -)

...