2010-10-20 12 views
10

Digamos que quiero establecer un guid para ser el guid de ensamblaje de mi aplicación. Como se buscó desde Internet, podemos usar (new Guid()).Next() para obtener un nuevo valor único.¿Cómo asegurarnos de que un guid generado sea único globalmente?

No puedo entender cómo se justifica que mi guid sea único frente a los demás? Por favor explique si sabe cómo hacerlo.

+0

esto podría ayudar: http://stackoverflow.com/questions/39771/is-a-guid-unique-100-of-the-time – Reza

Respuesta

3

De http://en.wikipedia.org/wiki/Globally_unique_identifier:

Algoritmo

En el algoritmo de OSF-especificada para generar nuevos GUID (V1), tarjeta de red la dirección MAC del usuario se utiliza como una base para el último grupo de dígitos GUID, que significa, por ejemplo, que un documento puede ser rastreado hasta la computadora que lo creó. Este agujero de privacidad se utilizó para localizar al creador del gusano Melissa [2]. La mayoría de los otros dígitos se basan en el tiempo al generar el GUID.

V1 Los GUID que contienen una dirección y hora MAC se pueden identificar con el dígito "1" en la primera posición del tercer grupo de dígitos, por ejemplo {2f1e4fc0-81fd-11da-9156-00036a0f876a}.

Los GUID de V4 usan el último algoritmo, que es un número pseudoaleatorio. Estos tienen un "4" en la misma posición, por ejemplo {38a52be4-9352-453e-af97-5c3b448652f0}. Más específicamente, el patrón de bits 'data3' sería 0001xxxxxxxxxxxx en el primer caso y 0100xxxxxxxxxxxx en el segundo. El criptoanálisis del generador de GUID de WinAPI muestra que, dado que la secuencia de GUID de V4 es pseudoaleatoria; dado el pleno conocimiento del estado interno, es posible predecir los valores anteriores y posteriores. [3].

6

La única garantía que tiene es que la probabilidad es de su lado. 2^128 GUID posibles y cierta inteligencia en el proceso de creación hace que sea muy poco probable que veas un duplicado.

Parece que V4 es el GUID estándar en Windows ahora. Si esa se basa puramente en un generador de números pseudoaleatorios, como parece indicar Wikipedia, se ve afectado por el Birthday problem.

He visto varios ejemplos usando 128 bits para mostrar que un duplicado es casi imposible. Esos a menudo pierden dos cosas. El problema del cumpleaños y que un GUID V4 en realidad es de 124 bits.

Necesita 1/2+sqrt(1/4-2*2^124*ln(0,5)) ≈ 5.4*10^18 GUID para llegar a un 50% de posibilidades de duplicar. Eso todavía es mucho, pero el 50% puede no ser el trato que está buscando. Digamos que quiere que sea uno en un millón para obtener un duplicado, entonces puede tener sqrt(2*2^124*ln(1/(1-0,000001))) ≈ 6,5 * 10^15 GUIDs. Si crea miles de GUID por segundo, puede seguir haciéndolo durante casi 206667 años antes de alcanzar un riesgo de uno a un millón de obtener un duplicado. 6,52191054316287e15/(3600*24*365,25*1000) ≈ 206666,874006986

La posibilidad de obtener todos los cálculos correctos → 0.

Cuestiones relacionadas