Вопрос

Почему в GUID .NET есть дефисы?Есть ли в большинстве реализаций GUID тире или это особенность Microsoft?

Подписано,

741ecf77-9c92-4435-8e6b-85975bd13452

Это было полезно?

Решение

Технически в букве нет «тире». ГУИД.GUID — это 128-битное значение, которое обычно хранится следующим образом (здесь для представления структуры используется C#):

public struct Guid
{
  public ulong Data1;
  public ushort Data2;
  public ushort Data3;
  public fixed byte Data4[8];
}

Тире находятся в строковое представление GUID.

Дефисы являются необязательными и не обязательны в строковом представлении GUID.

Тем не менее, Есть исторические причины относительно того, где расположены тире., связанный с тем, как были созданы GUID, но эта историческая семантика больше не применяется.

Другие советы

В первоначальной версии спецификации UUID (Universally Unique Identifier) ​​каждый из элементов данных имел семантическое значение:

{ time_low } – { time_mid } – { time_high_and_version } – { clock_seq_and_reserved clock_seq_low } – { node_id }

Эти элементы были разработаны для обеспечения временной (биты времени) и пространственной (биты хоста) уникальности.

История версий

Поскольку математическая вероятность коллизий в пространстве ключей размером 2^1024 случайных битов оказалась астрономически маловероятной, последующие версии спецификации UUID постепенно исключили время и данные хоста по соображениям безопасности и конфиденциальности.

Единственные элементы, которые сохраняют какое-либо значение, — это биты версии и зарезервированные биты.

UUID версии 3 получаются из хеша MD5 URI или другого отличительного имени.

Версия 4 генерируется на основе случайных данных и на данный момент является наиболее распространенной реализацией, которую вы встретите в реальной жизни.

Версия 5 получена из хеша SHA1.

Форматы хранения

Поскольку дефисы указаны для форматирования UUID ASCII в RFC, даже если отдельные разделы больше не сохраняют свое первоначальное значение, они все равно необходимы, если вам нужна совместимость.

UUID также иногда сохраняются в виде строки в кодировке Base64 или Ascii85, чтобы сэкономить место для передачи по транспортным средствам, которые не являются бинарно-безопасными, и соблюдение RFC не требуется.

Ascii:   3F2504E0-4F89-11D3-9A0C-0305E82C3301
Base64:  7QDBkvCA1+B9K/U0vrQx1A
Ascii85: 5:$Hj:Pf\4RLB9%kU\Lj

Использованная литература:
RFC4122 (см. стр. 3 специально для описания ABNF формата UUID)
Википедия ГУИД UUID

Дефисы обозначают байтовую структуру Guid.

typedef struct _GUID 
{  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];
} GUID;

Для:

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)

Вероятно, вы можете удалить их перед сохранением.По крайней мере, в .NET конструктор типа Guid инициализирует переменную Guid из ее строкового представления независимо от того, присутствуют ли дефисы или они удалены.

Вы можете получить руководство в различных форматах.

Предполагая, что вы используете С#:

Guid guid = Guid.NewGuid();

Console.WriteLine(guid.ToString("N"))

63be6f7e4e564f0580229f958f492077

Console.WriteLine(guid.ToString("D"))

63be6f7e-4e56-4f05-8022-9f958f492077

Console.WriteLine(guid.ToString("B"))

{63be6f7e-4e56-4f05-8022-9f958f492077}

Console.WriteLine(guid.ToString("P"))

(63be6f7e-4e56-4f05-8022-9f958f492077)

Это просто удобство.

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

Это пример фрагментации, такой же, как номера телефонов, номера кредитных карт и т. д.

Вот хорошая статья об этом в Википедии.

Практически каждое визуальное представление руководства, которое я видел, использует пунктирный формат.Глазам гораздо легче.

А Guid класс .NET распознает множество различных форматов:тире в качестве разделителей, без разделителей, скобки в качестве разделителей, круглые скобки в качестве разделителей, без разделителей и т. д.

Дефисы используются для разделения каждой цифры.

E93416C5-9377-4A1D-8390-7E57D439C9E7

Hex digits  Description
8           Data1
4           Data2
4           Data3
4           Initial two bytes from Data4
12          Remaining six bytes from Data4

Это просто для удобства.GUID состоит из 16 байт, что в шестнадцатеричном текстовом представлении составляет 32 символа.Без дефисов GUID труднее воспринимать людям и труднее распознавать как GUID, а не как какие-то случайные 16-байтовые числа.

Если вы хотите где-то хранить руководство, храните его как массив из 16 байт, а не как его текстовое представление.Вы сэкономите много места, и вопрос о дефисах не возникнет.

GUID на самом деле — это просто число.Дефисы показывают, как разбиты различные компоненты, но на самом деле они не являются частью числа.Это как IP-адрес — вы можете хранить 32-битное число или строку с точками, они эквивалентны.

Дефисы совершенно не влияют на уникальность или случайность значения.Они являются просто пережитком определения GUID и визуально разделяют четыре отдельные части данных, составляющих GUID.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top