Почему в .NET GUID есть тире?

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

Подпись,

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

Ответ 1

Технически, в GUID нет "тире". GUID - это 128-битное значение, которое обычно сохраняется следующим образом (используя С# здесь для представления структуры):

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

Черточки отображаются в строковом представлении GUID.

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

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

Ответ 2

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

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

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

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

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

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

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

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

Версия 5 выводится из хэша SHA1.

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

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

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

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

Ссылки:
RFC4122 (см. стр. 3 специально для описания формата UUID ABNF)
Википедия GUID UUID

Ответ 3

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

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

Для:

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)

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

Ответ 5

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

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

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)

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

Ответ 13

Гипны абсолютно не влияют на уникальность или случайность значения. Это просто отрыв от определения GUID и визуально разделять четыре отдельные части данных, которые составляют GUID.