Pregunta

¿Por qué hay guiones en un GUID .NET? ¿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

¿Fue útil?

Solución

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 sobre dónde está la ubicación de los guiones , en relación con la forma en que estaban los GUID generado, pero esa semántica histórica ya no se aplica.

Otros consejos

En la versión inicial de la especificación UUID (Identificador universalmente único), cada uno de los elementos de datos tenía un significado semántico:

{ time_low } - { time_mid } - { time_high_and_version } - {& nbsp; clock_seq_and_reserved & nbsp; 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 clave 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 retienen 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 distinguido.

La versión 4 se genera con datos aleatorios y es, actualmente, 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 se especifican para el formato ASCII de UUID en el RFC, a pesar de que las secciones individuales ya no conservan su significado original, aún son necesarias si necesita interoperabilidad.

Los UUID también a veces se almacenan como una cadena codificada en base64 o ascii85 para ahorrar espacio para la transmisión a través de transportes que no son seguros para los binarios, y no se requiere la adhesión al 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

Los guiones denotan la estructura de bytes de un Guid.

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

Para:

(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX)

Probablemente pueda despojarlos antes de guardar. Al menos en .NET, el constructor del tipo Guid inicializará una variable Guid a partir de su representación de cadena, independientemente de si los guiones todavía están allí o eliminados.

Puedes obtener tu guid en varios formatos.

Suponiendo que está 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)

Es solo una conveniencia.

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

Este es un ejemplo de fragmentación, como los números de teléfono, números de tarjetas de crédito, etc.

Aquí hay un buen artículo de Wikipedia al respecto.

Casi todas las representaciones visuales de un guid que he visto usan el formato discontinuo. Es mucho más fácil para la vista.

La clase Guid de .NET reconoce varios formatos diferentes: guiones como separadores, sin separadores, corchetes como delimitadores, paréntesis como delimitadores, sin delimitadores, etc.

Los guiones se usan 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

Eso es solo por conveniencia. El GUID consta de 16 bytes que componen 32 caracteres en representación de texto hexadecimal. Sin guiones, los GUID son más difíciles de percibir por los humanos y más difíciles de reconocer como GUID y no como números aleatorios de 16 bytes.

Si desea almacenar un guid en algún lugar, guárdelo como una matriz de 16 bytes, no como su representación textual. Ahorrará mucho espacio y no surgirá la cuestión de los guiones.

El GUID es realmente solo 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.

Los hypens no tienen ningún efecto en la unicidad o 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top