2010-10-20 8 views
10

Disons que je veux définir un guid pour être le guide d'assemblage de mon application. Comme recherché sur Internet, nous pouvons utiliser (new Guid()).Next() pour obtenir une nouvelle valeur unique.Comment s'assurer qu'un guid généré est unique au monde?

Je ne peux pas comprendre comment mon guid est justifié d'être unique contre les autres? S'il vous plaît expliquer si vous savez comment.

+0

cela pourrait aider: http://stackoverflow.com/questions/39771/is-a-guid-unique-100-of-the-time – Reza

Répondre

6

Ce n'est pas le cas, mais la façon dont il est généré et la manière dont il est représenté rend presque impossible la génération de deux mêmes GUID dans ce milenium.

Voir: Simple proof that GUID is not unique

3

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

algorithme

Dans l'algorithme spécifié OSF-pour générer de nouvelles (V1) GUID, l'adresse MAC de la carte réseau de l'utilisateur est utilisé comme base pour le dernier groupe de chiffres GUID, qui Cela signifie, par exemple, qu'un document peut être retracé jusqu'à l'ordinateur qui l'a créé. Ce trou de confidentialité a été utilisé pour localiser le créateur du ver Melissa [2]. La plupart des autres chiffres sont basés sur l'heure lors de la génération du GUID.

V1 GUID qui contiennent une adresse MAC et l'heure peuvent être identifiés par le chiffre "1" dans la première position du troisième groupe de chiffres, par exemple {2f1e4fc0-81fd-11da-9156-00036a0f876a}.

Les GUID V4 utilisent l'algorithme ultérieur, qui est un nombre pseudo-aléatoire. Ceux-ci ont un "4" dans la même position, par exemple {38a52be4-9352-453e-af97-5c3b448652f0}. Plus précisément, le modèle de bits 'data3' serait 0001xxxxxxxxxxxx dans le premier cas, et 0100xxxxxxxxxxxx dans le second cas. La cryptanalyse du générateur WinAPI GUID montre que, puisque la séquence des GUID V4 est pseudo-aléatoire; étant donné la pleine connaissance de l'état interne, il est possible de prédire les valeurs précédentes et suivantes.

6

La seule garantie que vous avez est que la probabilité est de votre côté. 2^128 GUID possibles et une certaine habileté dans le processus de création rend très peu probable que vous verriez jamais un doublon.

Il semble que V4 est maintenant le GUID standard sous Windows. Si celui-ci est purement basé sur un générateur de nombres pseudo-aléatoires, comme Wikipedia semble l'indiquer, il est affecté par le Birthday problem.

J'ai vu plusieurs exemples utilisant 128 bits pour montrer qu'une copie est presque impossible. Ceux-ci manquent souvent deux choses. Le problème d'anniversaire et qu'un GUID V4 est en réalité 124 bits.

Vous avez besoin de 1/2+sqrt(1/4-2*2^124*ln(0,5)) ≈ 5.4*10^18 GUID pour obtenir 50% de chances d'un doublon. C'est encore beaucoup, mais 50% peut ne pas être l'affaire que vous recherchez. Supposons que vous voulez qu'il y en ait un sur un million pour obtenir un doublon, alors vous pouvez avoir sqrt(2*2^124*ln(1/(1-0,000001))) ≈ 6,5 * 10^15 GUID. Si vous créez un millier de GUID par seconde, vous pouvez continuer à le faire pendant près de 206667 ans avant d'avoir un risque de duplication de un à un million. 6,52191054316287e15/(3600*24*365,25*1000) ≈ 206666,874006986

La probabilité que tous ces calculs soient corrects → 0.