2011-02-28 24 views
11

¿Es posible crear guids idénticas en una sola aplicación¿Es posible crear guids idénticos

Guid id = Guid.NewGuid(); 
+0

[Ver esta pregunta/respuesta] (http://stackoverflow.com/questions/3004151/could-this-cause-multiple-identical-guids). –

+0

Puede ayudarte .. http://stackoverflow.com/questions/467271/how-random-is-system-guid-newguid http://stackoverflow.com/questions/300786/duplicate-returned-by-guid- newguid – Yuriy

Respuesta

14

Técnicamente, sí. A Guid creado se ve por ejemplo como esta:

26de36b7-76f5-4f17-8f9d-44eb429f151b 

Eso significa 32 caracteres que pueden ser una letra (26 posibilidades) o con un dígito (10 posibilidades)

Eso significa 36 posibilidades por posición para un total de 36^32 eso es aprox. 60 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000.

Eso significa que si crea 2 000 000 000 000 000 000 000 000 000 000 000 000 000 Guids cada milésimas de segundo (lo cual es imposible) , en promedio obtendrás el mismo guid creado dos veces una vez, y todas las demás guías serán únicas.

En la práctica. No;)

+1

¿Los GUID no están representados como hex?Si es así, no tiene 26 letras para elegir, tiene 6. –

+0

@CraigW. - Ese es un punto excelente :) Eso significa que las matemáticas son un poco, pero la teoría sigue siendo la misma: con 16 posibilidades, significa que el número total de GUID posibles es 3,4e38 en vez de 6,33e49. Aún más que lo suficientemente alto como para evitar colisiones. –

-1

La U en GUID representa único. ;-) Entonces no debería ser posible.

+4

Pero lo es. Improbable, pero aún posible. –

0

Guid.NewGuid() siempre creará un Guid único, en todo el mundo, no solo dentro de una sola aplicación.

+1

No más, verifique las especificaciones. Windows, al menos, usa V4 de la especificación GUID, y la parte única se ha reducido a un solo sistema. Es poco probable que genere claves duplicadas en todos los sistemas, pero aún es posible. –

+0

Es cierto que hay una posibilidad teórica ... – Olaf

9

Si está preguntando si el riesgo de Guid.NewGuid() crear guiones duplicados es alto, entonces la respuesta es no. Esto está tomado de Wikipedia:

El valor de un GUID es representado como una cadena hexadecimal de 32 caracteres, como {21EC2020-3AEA-1069-A2DD-08002B30309D}, y normalmente se almacena como una de 128 bits entero. El número total de claves únicas es 2128 o 3.4 × 1038, aproximadamente 2 billones por milímetro cúbico de todo el volumen de la Tierra. Este número es tan grande que la probabilidad de que se genere el mismo número dos veces es extremadamente pequeña.

Si nos solicita cómo crear dos GUID duplicados, entonces esta es la respuesta:

Guid g1 = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D"); 
Guid g2 = new Guid("21EC2020-3AEA-1069-A2DD-08002B30309D"); 
1

Theoreticaly? Sí

¿Práctico? Tienes más posibilidades de ganar la lotería 10 veces seguidas, que crear dos GUID iguales, incluso en una sola aplicación.

Ver Simple proof that GUID is not unique

+1

En realidad, es probable que tenga una mejor oportunidad de ganar la lotería cada semana por el resto de su vida (si las probabilidades no son horribles);) –

-1

De hecho, he tenido que esto ocurra justo. Tenía una tabla de base de datos que contenía 7 elementos. Desde mi programa, agregué una nueva instancia, usando Guid.NewGuid() para su ID. Me dieron un DbUpdateException diciéndome que el ID era idéntico al existente. Lo intenté de nuevo, funciona bien.

+0

las probabilidades son tan pequeñas que vería un choque que buscaría un error/enhebrando el problema en lugar de sospechar del propio algoritmo guid: consulte [este artículo sobre el algoritmo guid] (http://blogs.msdn.com/b/oldnewthing/archive/2008/06/27/8659071.aspx). – chris

Cuestiones relacionadas