Guid против случайной строки

Если я случайным образом сгенерирую строку длиной 32 символа, могу ли я использовать эту строку в качестве GUID для всех намерений и целей?

Будет ли сгенерированный мной «GUID» иметь большую или меньшую вероятность коллизии, чем «настоящий» GUID?

Любая более конкретная информация о GUID и о том, как они сравниваются со случайными строками, приветствуется.


person guidlerner    schedule 18.05.2011    source источник


Ответы (6)


алгоритмы генерации GUID учитывают дату и время, а также генерируют случайные числа для создайте окончательное 128-битное значение.

Если вы просто генерируете случайные строки без каких-либо других алгоритмов, тогда да, вы столкнетесь с гораздо большим риском столкновения. (Компьютеры не могут создавать действительно случайные числа, поэтому другие данные должны быть объединены в алгоритмы генерации GUID, чтобы снизить риск коллизии. Например, GUID v1 использовал MAC-адрес компьютера, хотя этот подход устарел, поскольку он идентифицирует генерирующий компьютер.)

Вы можете создать собственное значение GUID, но зачем изобретать то, что уже хорошо работает?

Кроме того, см. ответ Эрика Липперта о том, почему использование GUID лучше, чем использование вашего собственного генератора случайных идентификаторов собственного изготовления.

person Paul Sasik    schedule 18.05.2011

GUID — это не 32-символьная строка. Так что нет, вы не можете использовать его вместо GUID.

В зависимости от кодировки символ может состоять из одного или двух байтов, поэтому 32 символа могут состоять из 32 или 64 байтов. GUID составляет 16 байт. Если у вас есть эквивалентное количество случайностей в вашем генераторе, ваша строка будет давать меньше шансов на столкновение. Сказав это, вероятность столкновения в 16 байтах довольно маловероятна.

Суть в том, что у вас должен быть как минимум такой же хороший генератор, как генератор Guid, чтобы он окупился. Когда вы это сделаете, запатентуйте это.

person Xhalent    schedule 18.05.2011

Зависит от GUID, с которым вы его сравниваете: в настоящее время большинство GUID являются «Версией 4», что на самом деле представляет собой просто большое случайное число с некоторыми потерянными битами. Так что, пока ваш генератор случайных чисел так же хорош, как тот, который использовался для генерации GUID, ваше решение будет более уникальным.

Если это GUID версии 1, то он, вероятно, более уникален, чем случайное число (при условии, что оно используется должным образом: системные часы сбрасываются не очень часто, в системе есть сетевая карта и MAC-адрес не был изменен). подделан), но большинство людей больше не используют версию 1, потому что она приводит к утечке вашего MAC-адреса.

person Rick Yorgason    schedule 23.05.2011

Это зависит от алгоритма, который вы будете использовать. Если у вас есть хороший генератор, результат будет таким же.

Вероятность зависит от того, насколько хороши оба генератора (ваш против генератора GUID).

person Euqil    schedule 18.05.2011

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

person Eminem    schedule 18.05.2011

Социальный MSDN дает мало информации, но не отвечает на ваш вопрос, более вероятно ли столкновение или нет. Структура GUID указывает, что GUID является не строкой, а "A GUID — это 128-битное целое число (16 байт), которое можно использовать на всех компьютерах и в любых сетях, где требуется уникальный идентификатор. Вероятность дублирования такого идентификатора очень мала."

person Dev.Jaap    schedule 18.05.2011