Как убедиться, что созданный guid является уникальным во всем мире?

Скажем, я хочу установить guid в качестве моего приложения. При поиске в Интернете мы можем использовать (new Guid()).Next() для получения нового уникального значения.

Я не могу понять, как мой посох должен быть уникальным против других? Пожалуйста, объясните, знаете ли вы, как это сделать.

Ответ 2

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

Кажется, V4 - это стандартный GUID для Windows. Если это чисто основано на генераторе псевдослучайных чисел, как указывает Википедия, это повлияло на проблему День рождения.

Я видел несколько примеров, использующих 128 бит, чтобы показать, что дубликат почти невозможно. Те часто пропускают две вещи. Проблема с днем ​​рождения и что VID GUID на самом деле составляет 124 бит.

Вам нужно 1/2+sqrt(1/4-2*2^124*ln(0,5)) ≈ 5.4*10^18 GUID, чтобы получить 50% -ный шанс дублирования. Это все еще много, но 50% может быть не той сделкой, которую вы ищете. Скажите, что вы хотите, чтобы это было один миллион, чтобы получить дубликат, тогда вы можете иметь sqrt(2*2^124*ln(1/(1-0,000001))) ≈ 6,5 * 10 ^ 15 GUID. Если вы создадите тысячу идентификаторов GUID в секунду, вы можете продолжать делать это почти 206667 лет, прежде чем достигнуть от одного до миллиона риска получения дубликата. 6,52191054316287e15/(3600*24*365,25*1000) ≈ 206666,874006986

Вероятность того, что я сделаю все эти вычисления правильными → 0.

Ответ 3

Из http://en.wikipedia.org/wiki/Globally_unique_identifier:

Алгоритм

В указанном OSF алгоритме для генерации новых (V1) GUID, MAC-адрес сетевой карты пользователя используется в качестве базы для последней группы идентификаторов GUID, что означает, например, что документ можно отследить до компьютер, который его создал. Это отверстие для конфиденциальности использовалось при поиске создателя червя Мелиссы [2]. Большинство других цифр основаны на времени при создании GUID.

V1 GUID, которые содержат MAC-адрес и время, могут быть идентифицированы цифрой "1" в первой позиции третьей группы цифр, например {2f1e4fc0-81fd-11da-9156-00036a0f876a}.

V4 GUID используют более поздний алгоритм, который является псевдослучайным числом. Они имеют "4" в том же положении, например {38a52be4-9352-453e-af97-5c3b448652f0}. Более конкретно, бит бит данных "data3" будет в первом случае 0001xxxxxxxxxxxx, а во втором - 0100xxxxxxxxxxxx. Криптоанализ генератора GUID WinAPI показывает, что, поскольку последовательность VID GUID является псевдослучайной; учитывая полное знание внутреннего состояния, можно предсказать предыдущие и последующие значения. [3].