Автономный генератор C# UUID версии 4 и проверка UUID

Для ключей распределенного хранилища я хочу использовать UUID v4, и System.Guid .NET Framework дает мне именно это. Однако я не могу прямо сейчас проверить, дает ли Mono тот же v4? Есть ли автономный генератор v4 на C#/F#? Есть ли спецификация, в которой говорится, что .NET/Mono GUID всегда имеет версию 4? (гуглил, не нашел)

Кроме того, я хочу немного поработать с GUID v4. Учитывая, что это формат xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, я хочу заменить 4 на собственный шестнадцатеричный номер. Мне нужно это, чтобы внедрить информацию об эпохе, когда мои GUID были сгенерированы в моей системе, и я знаю, что максимальное количество эпох никогда не достигнет HEX f.

Вопрос в том, безопасно ли это и рассчитано на будущее? Знаете ли вы о каком-либо программном обеспечении, которое каким-либо образом проверяет Guids способом, отличным от «должно быть около 128 бит»? Я боюсь, что положить, например. 5 вместо 4 может что-то сломать, например. Тип столбца PostgreSQL uuid или в какой-то подобной ситуации. И я не могу проверить все случаи, когда это могло произойти. Я проверил все числа вместо 4 с System.Guid.Parse(), и все работает нормально, но я не знаю, повезло ли это или по спецификации.


person V.B.    schedule 10.04.2014    source источник
comment
Очевидно, что портирование моно исходников заняло менее 10 минут... Вторая часть пока под вопросом.   -  person V.B.    schedule 10.04.2014


Ответы (1)


Согласно спецификациям UUID на странице http://www.ietf.org/rfc/rfc4122.txt

Цитирую (это в разделе v4):

Соответствие синтаксису URN: строковое представление UUID полностью совместимо с синтаксисом URN. При преобразовании из побитового представления UUID в памяти в URN необходимо соблюдать осторожность, чтобы строго соблюдать порядок байтов, упомянутый в разделе о строковом представлении.

Механизм проверки: помимо определения того, находится ли временная метка UUID в будущем и, следовательно, еще не может быть назначена, не существует механизма для определения того, является ли UUID «действительным».

** Я предполагаю, что если проверка невозможна, никакое программное обеспечение не должно жаловаться на ваш UUID, сгенерированный вручную, если отметка времени является будущей.

person DanielCuadra    schedule 10.04.2014
comment
Спасибо! Интересно узнать, действительно ли какое-либо программное обеспечение выполняет эту проверку. Спецификация только говорит, что это единственный возможный способ, но не говорит, что это обязательно. System.Guid.Parse с удовольствием ест GUID из будущего - person V.B.; 10.04.2014
comment
Вероятно, вам следует начать гуглить о строгости спецификации UUID на нескольких платформах и основывать свое программное обеспечение на этом исследовании. - person DanielCuadra; 10.04.2014
comment
Учитывая, что v4 совершенно случайный, а v6+ может быть любым, маловероятно, что кто-то проверит. Я прекращу активно исследовать здесь, спасибо! - person V.B.; 10.04.2014