Почему в .NET GUID есть тире? Есть ли черты в большинстве реализаций GUID, или это просто Microsoft?
Подпись,
741ecf77-9c92-4435-8e6b-85975bd13452
Почему в .NET GUID есть тире? Есть ли черты в большинстве реализаций GUID, или это просто Microsoft?
Подпись,
741ecf77-9c92-4435-8e6b-85975bd13452
Технически, в GUID нет "тире". GUID - это 128-битное значение, которое обычно сохраняется следующим образом (используя С# здесь для представления структуры):
public struct Guid
{
public ulong Data1;
public ushort Data2;
public ushort Data3;
public fixed byte Data4[8];
}
Черточки отображаются в строковом представлении GUID.
Тишины являются необязательными и не требуются в строковом представлении GUID.
Тем не менее, есть исторические причины относительно того, где размещены тире, связанные с тем, как были созданы GUID, но эта историческая семантика больше не применяется.
В исходной версии спецификации 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
Дефисы обозначают структуру байтов 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)
Это пример фрагментации, как номера телефонов, номера кредитных карт и т.д.
Почти каждое визуальное представление руководства, которое я видел, использует пунктирный формат. Это намного проще на глазах.
Класс 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.