.net - example - guid vs uuid
¿Por qué hay guiones en un.NET GUID? (13)
¿Por qué hay guiones en un .NET GUID? ¿Hay guiones en la mayoría de las implementaciones de un GUID, o es solo una cosa de Microsoft?
Firmado
741ecf77-9c92-4435-8e6b-85975bd13452
Casi todas las representaciones visuales de un guid que he visto utilizan el formato de guiones. Es mucho más fácil en los ojos.
El GUID es en realidad sólo un número. Los guiones le muestran cómo se desglosan los distintos componentes, pero en realidad no son parte del número. Es como una dirección IP: puede almacenar un número de 32 bits, o puede almacenar una cadena con puntos, son equivalentes.
En la versión inicial de la especificación UUID (identificador único universal), cada uno de los elementos de datos tenía un significado semántico:
{ time_low } - { time_mid } - { time_high_and_version } - { clock_seq_and_reserved clock_seq_low } - { node_id }
Estos elementos fueron diseñados para proporcionar unicidad temporal (bits de tiempo) y espacial (bits de host).
Historial de versiones
Como se encontró que la probabilidad matemática de colisiones en un espacio de claves de 2 ^ 1024 bits aleatorios es astronómicamente improbable, las versiones posteriores de la especificación UUID han eliminado el tiempo y los datos del host por razones de seguridad y privacidad.
Los únicos elementos que conservan algún significado son los bits de versión y los bits reservados.
Los UUID de la versión 3 se derivan de un hash MD5 de un URI u otro nombre distintivo.
La versión 4 se genera con datos aleatorios y, en la actualidad, es la implementación más común que verá en la naturaleza.
La versión 5 se deriva de un hash SHA1.
Formatos de almacenamiento
Dado que los guiones están especificados para el formato ASCII de UUID en el RFC, aunque las secciones individuales ya no conservan su significado original, aún son necesarias si necesita interoperabilidad.
Los UUID también se almacenan a veces como una cadena codificada en base64 o ascii85 para ahorrar espacio para la transmisión a través de transportes que no son binarios seguros, y no se requiere la adhesión a la RFC.
Ascii: 3F2504E0-4F89-11D3-9A0C-0305E82C3301 Base64: 7QDBkvCA1+B9K/U0vrQx1A Ascii85: 5:$Hj:Pf/4RLB9%kU/Lj
Referencias:
RFC4122 (consulte la página 3 específicamente para la descripción ABNF del formato UUID)
Wikipedia GUID UUID
Es sólo una conveniencia.
Eso es sólo por conveniencia. El GUID consta de 16 bytes que forman 32 caracteres en una representación de texto hexadecimal. Sin guiones, los GUID son más difíciles de percibir por los seres humanos y más difíciles de reconocer como GUID y no algunos números de 16 bytes de naturaleza aleatoria.
Este es un ejemplo de fragmentación, al igual que los números de teléfono, números de tarjetas de crédito, etc.
La clase Guid
de .NET reconoce un montón de formatos diferentes: guiones como separadores, sin separadores, corchetes como delimitadores, paréntesis como delimitadores, sin delimitadores, etc.
Los guiones denotan la estructura de bytes de un Guid.
typedef struct _GUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
Por:
(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)
Probablemente puedas despojarlos antes de guardarlos. Al menos en .NET, el constructor del tipo Guid inicializará una variable Guid desde su representación de cadena independientemente de si los guiones todavía están allí o se eliminan.
Los guiones se utilizan para separar cada número.
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
Los hypens no tienen ningún efecto en la singularidad o la aleatoriedad del valor. Son simplemente un remanente de la definición de un GUID y separan visualmente las cuatro partes distintas de los datos que forman el GUID.
Puedes conseguir tu guid en varios formatos.
Asumiendo que estás usando c #:
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)
Si desea almacenar un guid en algún lugar, entonces guárdelo como una matriz de 16 bytes, no como su representación textual. Ahorrarás mucho espacio y no surgirá la cuestión de los guiones.
Técnicamente, no hay "guiones" en un GUID . Un GUID es un valor de 128 bits que generalmente se almacena de la siguiente manera (usando C # aquí para representar la estructura):
public struct Guid
{
public ulong Data1;
public ushort Data2;
public ushort Data3;
public fixed byte Data4[8];
}
Los guiones están en la representación de cadena de un GUID.
Los guiones son opcionales y no se requieren en una representación de cadena de un GUID.
Dicho esto, hay razones históricas en cuanto a dónde se ubican los guiones , en relación con cómo se generaron los GUID, pero la semántica histórica ya no se aplica.