#c_sharp
Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных
ключей настолько велико (2128 или 3,4028×1038), что вероятность того, что в мире будут
независимо сгенерированы два совпадающих ключа, крайне мала.
Как его изменить (модифицировать) чтобы он вообще никогда не мог совпасть?
Ответы
Ответ 1
Если вопрос чисто теоретический, то изменить (модифицировать) GUID, так чтобы он вообще никогда не мог совпасть - невозможно. Если практический, прибавьте к нему timestamp и уникальный id клиента (того, кто генерирует id, например id телефона или жесткого диска). Для хранения второго числа можно использовать отдельное поле. Сравнивать разумеется надо сразу оба поля. Теоретически этим мы нарушим правило 128 бит в GUID, но практически мы застрахуемся, например, от неверного алгоритма получения случайных чисел и даже при супер больших данных не получим коллизии. Насколько я помню в WinAPI при генерации итак учитывается timestamp и id устройства. Впрочем, вероятность коллизии и с обычным GUID итак пренебрежительно мала.Ответ 2
Невозможно. Дело в том, что GUID имеет фиксированную длину 128 бит. Всего разных 128-битных чисел ровно 2128. Допустим, вы смогли создать «идеальный» генератор GUID'ов. Запустите его на генерацию 2128 + 1 числа. Из них, понятно, какие-то два из них совпадут. Для того, чтобы числа никогда не повторялись, они, как минимум, должны быть неограниченной битовой длины.Ответ 3
Уникальность обычно гарантируется двумя вещами, на выбор: Сравнением. Генерируете и проверяете, что такого ещё нет. Зависимостью от какой нибудь однозначной переменной, например время. Понятно, что оба способа имеют свои проблемы, но они в целом решаемы, если вы конечно не математическое обоснование чего-то в дипломе пишете.
Комментариев нет:
Отправить комментарий