2010-09-18 12 views
8

Acabo de generar unos millones de GUID, los convertí en un String y obtuve la longitud ... siempre fue lo mismo. ¿Puedo confiar en esta longitud fija del GUID al convertir a String?Preguntas sobre los GUID: ¿Siempre se fijan en longitud y el número medio siempre es 4?

Además, ¿el número medio del GUID siempre es "4" como se muestra en esta captura de pantalla?

alt text

+0

Solo puede confiar en lo que dice la especificación sobre el GUID. Si la especificación no menciona una representación de cadena de longitud fija, entonces no confíe en ella. –

+0

@Keith: el formato 8-4-4-4-12 es el estándar, tanto para MS como para OSF. MS docs decir de Guid.ToString() "El valor de este Guid, formateado de la siguiente manera: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" –

+0

Ok, entonces usted está bien. –

Respuesta

8

Sí, la longitud es fija y sí, el número del medio es siempre 4 cuando se utiliza el formato estándar toString. Algunos de los bits en GUID (conocido como un UUID casi en cualquier lugar que no es ventanas) son fijos, aspectos como la versión etc ..

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

EDITAR debo añadir que el "4 "solo se aplica a los Guids que se han generado de acuerdo con el algoritmo Guid.NewGuid tal como se implementó en .NET. No hay nada que le impida tomar cualquier byte arbitrario [16] y convertirlo en Guid. Por lo tanto, solo puede confiar en que sea 4 para la implementación actual del algoritmo en .Net. Si obtiene Guids de otra fuente, no puede depositar en el 4. Una actualización de .Net o posiblemente Windows (dependiendo de si .Net usa su propio generador o el de Windows) puede cambiar los números fijos del GUID

por ejemplo el siguiente código está trabajando completamente y no tendrá la 4 en la posición:

 var rand = new Random(); 
     var byteArray = new byte[16]; 
     rand.NextBytes(byteArray); 
     var g = new Guid(byteArray); 
+1

El 4 es el número de versión. Depende de cómo se generó, * no * cómo lo convierte en una cadena. – Gabe

+0

Si visualizó el GUID como un número de base 10, no habría un 4 en esa posición siempre. Eso sí, hacer eso sería una locura, es solo que PODRÍAS. – mjfgates

+1

@Gabe - para acortar la longitud de la cuerda, un truco semi común es hacer una conversión de base 64, en cuyo caso la cuerda no tendría el 4 en posición, enmascararía los valores fijos. por ejemplo: Convert.ToBase64String (guid.ToByteArray()); –

3

Desde el documentation on Guid.ToString (sin parámetros):

El valor de este Guid, con el formato sigue: xxxxxxxx -xxxx-xxxx-xxxx-xxxxxxxxxxxx donde el valor de la GUID es representado como una serie de minúsculas dígitos hexadecimales en grupos de 8, 4, 4, 4, y 12 dígitos y separados por guiones. Un ejemplo de un valor de retorno es "382c74c3-721d-4f34-80e5-57657b6cbc27".

Así que la respuesta es "sí", se siempre tener la misma longitud.

En cuanto al 4, es un número de versión (según http://en.wikipedia.org/wiki/Uuid). Cada GUID que genere con ese algoritmo tendrá un 4 en esa posición, pero los GUID anteriores tendrán un 1, 2 o 3. Los futuros pueden tener un 5 o algo más.

2

n - un GUID no tiene que ser un tipo 4 UUID de hecho muchas GUIDS debajo de ventanas son UUID del tipo 1.

Tipo 1 toma la primaria MAC, un reloj y una secuencia. De hecho, esto "filtra" datos ya que todos los UUID1s que se crean en el mismo sistema tendrán el mismo MAC. Es por eso que la mayoría de las funciones GUID tomarán estos datos y los reducirá a hash y los convertirá en un UUID basado en hash.

Cuestiones relacionadas