2010-05-04 4 views
2

GUID генерируются комбинацией чисел и символов с дефисом.Можно ли создать собственный алгоритм для создания уникальных GUID?

например) {7B156C47-05BC-4eb9-900E-89966AD1430D}

В Visual Studio, у нас есть 'Создать GUID' инструмент для его создания. Надеюсь, что то же самое можно создать программным путем через API окон.

Как GUID являются уникальными? Почему они не используют никаких специальных символов, таких как #,^и т. Д.

Также возможно ли разработать собственный алгоритм для создания уникальных GUID?

+0

Рассматривали ли вы функции HASH? – Guru

+0

Можете ли вы рассказать, как мне его использовать? – AKN

ответ

3

Да, возможно, однако вы не должны пытаться изобретать велосипед без веских оснований для этого. Идентификаторы GUID сделаны уникальными включением элементов, которые (статистически говоря) являются весьма маловероятно, что то же самое в двух различных случаях, таких как:

  • текущего времени
  • обновлению системы
  • МАС-адрес система
  • случайное число
  • ...

Кроме того, рассмотреть последствия конфиденциальности GUIDs если вы реализуете его е rom, потому что они содержат вышеупомянутые данные, которые некоторые люди считают чувствительными.

1

Просто ответить на этот вопрос: Почему они не используют какие-либо специальные символы, такие как #,^и т.д ..

Предполагается быть 128bit Integer. Таким образом, общее представление является простым 32 шестнадцатеричным.

Вы можете создать также использовать 128 символов 1-х и т.д.

Что касается остальной части вопроса, wiki имеет хорошие ответы 0 '.

1

Вы должны создать новый GUID, вызвав API, разработанный для него. В родных оврагах находится CoCreateGUID; в .NET land это System.Guid.NewGuid();

+0

Есть ли вероятность того, что GUID, созданный с использованием вышеуказанного API, уникален? – AKN

+1

Да, есть. Я никогда не видел двух идентичных GUID, сгенерированных этим API. Если вы хотите спросить об обратном, то да, есть возможность получить два идентичных guid из этого API. Доказательство. Создайте 2^128 + 1 GUID; Вы обязательно получите дубликаты! –

3

UUID определены, например. в http://www.faqs.org/rfcs/rfc4122.html. Одна из проблем с использованием собственного алгоритма для создания чего-то вроде UUID заключается в том, что вы можете столкнуться с UUID других людей. Поэтому вы обязательно должны использовать чужую реализацию, если это вообще возможно, а если нет, напишите собственную реализацию одного из стандартных алгоритмов.

+0

Мне нравится этот ответ. Но можете ли вы назвать некоторые «стандартные алгоритмы», используемые для UUID. – AKN

+0

Стандартные алгоритмы определены в RFC, упомянутом выше. Например.«Алгоритм генерации UUID от имени и пространства имен - следующим образом:« выбрать произвольный (и немного необычный) пример. – mcdowella

Смежные вопросы