Конвертировать URI в GUID - PullRequest
2 голосов
/ 13 июня 2010

Какой хороший способ преобразовать путь к файлу (URI) в System.Guid? Я хотел бы свести к минимуму вероятность столкновения, но я доволен достаточно уникальным хэшированием (вероятно, никогда не превышающим нескольких десятков / сотен элементов в базе данных)

Ответы [ 3 ]

8 голосов
/ 14 апреля 2011

«Правильный» способ (согласно RFC 4122 §4.3) - создать UUID на основе имени. Преимущество этого (по сравнению только с использованием хэша MD5) состоит в том, что они гарантированно не конфликтуют с UUID без имени и имеют очень (очень) небольшую возможность конфликта с другими UUID на основе имени.

В .NET Framework нет встроенной поддержки для их создания, но с помощью кода , подобного этому , вы можете создать GUID следующим образом:

Guid guid = GuidUtility.Create(GuidUtility.UrlNamespace, filePath);

Чтобы еще больше снизить риск коллизий с другими GUID, вы можете создать частный GUID для использования в качестве идентификатора пространства имен (вместо использования идентификатора пространства имен URL, определенного в RFC).

8 голосов
/ 13 июня 2010

Нет необходимости.Хешируйте URI с помощью md5 или sha1 и все.GUID не для хеширования.Они должны были быть уникальными независимо от всего остального.

3 голосов
/ 13 июня 2010

Если у вас есть возможность централизованного реестра / базы данных, вы можете поддерживать GUID <-> преобразователь URL-адресов и генерировать новый GUID для каждого необходимого URL-адреса. При этом GUID будут использоваться так, как они предназначены, что сводит к минимуму вероятность коллизии с собственно сгенерированными GUID.

...