Можно ли безопасно сбросить байты UUID и при этом ожидать, что он сохранит свою уникальность? - PullRequest
4 голосов
/ 09 января 2011

Я написал следующий модуль, который кодирует UUID в произвольную базу:

http://pypi.python.org/pypi/shortuuid/

Теперь это сокращает до 22 символов с алфавитом по умолчанию, сохраняя при этом уникальность, ноМне было интересно, сколько (/ каких) цифр я мог бы отрезать при максимизации сохраняемой уникальности.

Все ли цифры UUID одинаково случайны / уникальны, или некоторые цифры более случайны, чем другие?Например, если первые несколько цифр являются машинно-прикладным идентификатором, то, очевидно, они будут менее случайными, чем последние несколько.Я не заметил ничего подобного в своих экспериментах, но я хочу быть уверен, прежде чем советовать людям по этому поводу.

Будет ли усекать это, скажем, до 8 цифр с вероятностью 1/57 ^ 8 столкновенияили вероятность не является равномерной по цифрам?

Ответы [ 2 ]

4 голосов
/ 09 января 2011

Из-за способа создания UUID, это очень сильно зависит от версии.И да, некоторые будут более случайными, чем другие.http://en.wikipedia.org/wiki/Uuid#Version_1_.28MAC_address.29

Одним из способов решения этой проблемы является использование хеша (например, sha256) UUID.Эти хеши должны быть распределены единообразно.

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

1 голос
/ 09 января 2011

Похоже, это зависит от того, с какой версией вы имеете дело.Начиная с версии 3, все должно быть довольно случайно

http://en.wikipedia.org/wiki/Universally_unique_identifier

...