Ces deux acronymes sont souvent utilisés et je me demande s'il existe des différences entre un GUID et un UUID.
Plus informatif que la réponse choisie. Je pense que la réponse choisie est la réponse la plus simple à la question, cependant.
Ces deux acronymes sont souvent utilisés et je me demande s'il existe des différences entre un GUID et un UUID.
El réponse simple est : **aucune différence, c'est la même chose.
Mise à jour du 2020-08-20 : Bien que les GUID (tels qu'utilisés par Microsoft) et les UUID (tels que définis par la RFC4122) se ressemblent et servent des objectifs similaires, il existe des différences subtiles, mais parfois importantes. Plus précisément, quelques documents sur les GUID de Microsoft permettent aux GUIDs de contenir n'importe quel chiffre hexadécimal dans n'importe quelle position, tandis que la RFC4122 exige certaines valeurs pour l'attribut version
y variant
champs. De plus, [selon ce même lien], les GUID doivent être tout en majuscules, alors que les UUIDs devrait être "sortent en caractères minuscules et sont insensibles à la casse en entrée". Cela peut entraîner des incompatibilités entre les bibliothèques de code ( comme ceci ).
(La réponse originale suit)
Traitez-les comme une valeur de 16 octets (128 bits) qui est utilisée comme une valeur unique. Dans le langage Microsoft, on les appelle GUIDs, mais on les appelle UUIDs quand on n'utilise pas le langage Microsoft.
Même les auteurs de la spécification UUID et Microsoft affirment qu'il s'agit de synonymes :
Extrait de l'introduction de l'IETF RFC 4122 " Un espace de noms URN (Universally Unique IDentifier - UUID) " : "un espace de noms de noms de ressources uniformes pour les UUID (Universally Unique IDentifier), également connus sous le nom de GUID (Globally Unique IDentifier)".
De la Recommandation UIT-T X.667, Norme internationale ISO/IEC 9834-8:2004 : "Les UUID sont également connus sous le nom d'identificateurs uniques mondiaux (GUID), mais ce terme n'est pas utilisé dans la présente recommandation."
Et Microsoft a même demandes d'indemnisation un GUID est spécifié par la RFC UUID : "Dans la programmation de Microsoft Windows et dans les systèmes d'exploitation Windows, un identifiant unique mondial (GUID), tel que spécifié dans [RFC4122], est... Le terme identifiant unique universel (UUID) est parfois utilisé dans les spécifications du protocole Windows comme synonyme de GUID."
Mais le réponse correcte Cela dépend de ce que la question signifie quand elle dit "UUID"...
La première partie dépend de ce que pense le demandeur lorsqu'il dit "UUID".
L'affirmation de Microsoft implique que tous les UUIDs sont des GUIDs. Mais tous les GUIDs sont-ils de vrais UUIDs ? Autrement dit, l'ensemble de tous les UUID est-il simplement un sous-ensemble approprié de l'ensemble de tous les GUID, ou s'agit-il exactement du même ensemble ?
En examinant les détails de la RFC 4122, on constate qu'il existe quatre "variantes" différentes d'UUID. Cela s'explique principalement par le fait que ces identificateurs de 16 octets étaient utilisés avant que ces spécifications ne soient réunies dans la création d'une spécification UUID. D'après la section 4.1.1 de RFC 4122 les quatre variantes de l'UUID sont :
Selon la RFC 4122, tous les UUID variantes sont de "vrais UUIDs", alors tous les GUIDs sont de vrais UUIDs. À la question littérale "y a-t-il une différence entre GUID et UUID", la réponse est définitivement non pour les UUID RFC 4122 : aucune différence (mais sous réserve de la deuxième partie ci-dessous).
Mais tous les GUIDs ne sont pas variante 2 (par exemple, Microsoft COM a des GUIDs qui sont des UUIDs de variante 3). Si la question était "y a-t-il une différence entre les GUID et la variante 2 des UUID", alors la réponse serait oui - ils peuvent être différents. La personne qui pose cette question ne sait probablement pas ce que sont les variantes et ils pourraient ne penser qu'à variante 2 UUID lorsqu'ils prononcent le mot "UUID" (par exemple, ils connaissent vaguement les formes d'UUID "adresse MAC+temps" et "algorithmes de nombres aléatoires", qui sont toutes deux des formes d'UUID. versions de variante 2). Dans ce cas, la réponse est oui différent .
La réponse dépend donc en partie de ce que pense la personne qui pose la question lorsqu'elle prononce le mot "UUID". Veut-elle parler de la variante 2 de l'UUID (parce que c'est la seule variante qu'elle connaisse) ou de tous les UUID ?
La deuxième partie dépend de la spécification utilisée pour la définition de l'UUID.
Si vous pensez que c'était déroutant, lisez les ITU-T X.667 ISO/IEC 9834-8:2004 qui est censé être aligné et totalement compatible techniquement avec RFC 4122 . Il y a une phrase supplémentaire dans la clause 11.2 qui dit : "Tous les UUIDs conformes à cette Recommandation | Norme Internationale doivent avoir des bits de variante avec le bit 7 de l'octet 7 mis à 1 et le bit 6 de l'octet 7 mis à 0". Ce qui signifie que seuls les variante 2 UUID se conforment à cette norme (ces deux valeurs binaires signifient variante 2). Si c'est le cas, alors tous les GUID ne sont pas des UUID conformes à l'UIT-T/ISO/CEI, car les UUID conformes à l'UIT-T/ISO/CEI peuvent seulement être variante 2 valeurs.
Par conséquent, la vraie réponse dépend également de la spécification de l'UUID sur laquelle porte la question. En supposant que nous parlions clairement de tous les UUID et pas seulement des UUID de la variante 2 : il y a aucune différence entre les GUID et les UUID de l'IETF, mais oui différence entre GUID et conforme Les UUID de l'UIT-T/ISO/IEC !
Les codages binaires peuvent différer
Lorsqu'il est codé en binaire (par opposition au format texte lisible par l'homme), le GUID peut être stocké dans une structure comportant quatre champs différents, comme suit. Ce format diffère de la [norme UUID]. 8 seulement dans l'ordre des octets des 3 premiers champs.
Bits Bytes Name Endianness Endianness
(GUID) RFC 4122
32 4 Data1 Native Big
16 2 Data2 Native Big
16 2 Data3 Native Big
64 8 Data4 Big Big
Plus informatif que la réponse choisie. Je pense que la réponse choisie est la réponse la plus simple à la question, cependant.
L'"endianness" est très importante. Si vous stockez l'identifiant sous forme d'octets, vous obtiendrez des résultats différents de ceux des GUID et UUID.
GUID est la mise en œuvre par Microsoft de la norme UUID.
Par Wikipedia :
Le terme GUID fait généralement référence à l'implémentation par Microsoft de l'identifiant de l'utilisateur. Identificateur unique universel (UUID).
Une citation actualisée de ce même article de Wikipedia :
La RFC 4122 elle-même indique que les UUID "sont également connus sous le nom de GUID". Tout ceci suggère que "GUID", bien que se référant à l'origine à une variante d'UUID utilisée par Microsoft, est devenu simplement un nom alternatif pour UUID
Tout comme Microsoft qui prend quelque chose qui fonctionne partout (l'univers) et le fait fonctionner dans un tout petit sous-ensemble (le globe) :)
Notez que si vous souhaitez convertir la représentation binaire GUID de Microsoft en un UUID standard, vous devrez inverser l'endianness des trois premiers champs de données (sur quatre), comme indiqué dans la section "Codage binaire" : fr.wikipedia.org/wiki/Globally_unique_identifier
Le GUID est utilisé depuis longtemps dans des domaines où il ne s'agit pas nécessairement d'une valeur de 128 bits comme dans le cas de l'UUID. Par exemple, le La spécification RSS définit les GUIDs peut être une chaîne de votre choix, à condition qu'elle soit unique, avec un attribut "isPermalink" pour spécifier que la valeur que vous utilisez n'est qu'un permalien vers l'élément syndiqué.
J'ai écrit une méthode pour convertir un tableau d'octets Guid en UUID en Java, j'espère que cela vous aidera :
public static UUID fromGuidByteArrayToUUID(byte[] blob) {
if(blob != null && blob.length == 16) {
ByteBuffer b1_4bytes = ByteBuffer.wrap(subByteArray(blob, 0, 4));
b1_4bytes.order(ByteOrder.LITTLE_ENDIAN);
ByteBuffer b2_2bytes = ByteBuffer.wrap(subByteArray(blob, 4, 2));
b2_2bytes.order(ByteOrder.LITTLE_ENDIAN);
ByteBuffer b3_2bytes = ByteBuffer.wrap(subByteArray(blob, 6, 2));
b3_2bytes.order(ByteOrder.LITTLE_ENDIAN);
ByteBuffer b4_8bytes = ByteBuffer.wrap(subByteArray(blob, 8, 8));
b4_8bytes.order(ByteOrder.BIG_ENDIAN);
ByteBuffer bb = ByteBuffer.allocate(16);
bb.putInt(b1_4bytes.getInt());
bb.putShort(b2_2bytes.getShort());
bb.putShort(b3_2bytes.getShort());
bb.putLong(b4_8bytes.getLong());
bb.position(0);
long firstLong = bb.getLong();
long secondLong = bb.getLong();
UUID uuid = new UUID(firstLong, secondLong);
return uuid;
}else {
return null;
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
217 votes
Je peux dire "GUID", je ne peux pas dire "UUID".
54 votes
Je prononce UUID comme "you-wid".
138 votes
Je dis "you-you-I-dee", mais je ne suis pas un locuteur natif...
26 votes
Spécification UUID ( RFC-4122 ) dit dans le résumé : Cette spécification définit un espace de noms de noms de ressources uniformes pour les UUID (Universally Unique IDentifier), également connus sous le nom de GUID (Globally Unique IDentifier).
5 votes
@rsp - J'ai ri, mais je me suis ensuite rappelé que l'informatique quantique est en train de devenir une réalité, donc vous avez peut-être raison !
0 votes
C'est drôle, dans un fichier .mpp, un enregistrement généré avait un id de "939da69e-8a84-ea11-9a04-d8fc9308ae6b" qui est valide dans le monde des guides, mais il semble que ce ne soit pas un uuid valide !
0 votes
L'UUID original utilisait l'adresse MAC de l'ordinateur (qui est unique), l'identifiant de la carte mère (également unique), l'heure de l'ordinateur (qui n'est pas toujours unique d'un ordinateur à l'autre, mais qui compte dans le temps) et enfin des données aléatoires. Ainsi, les UUID générés sur différentes machines ne peuvent jamais être identiques. Cependant, l'UUID exposait alors certaines informations clés du système, et c'est pourquoi il n'est plus utilisé, mais "simplement" 32 octets aléatoires à la place, ce qui a une chance beaucoup plus élevée (mais toujours très faible) de générer des identifiants identiques.
0 votes
@MattGreer cela ressemble beaucoup à "UID" cependant.
2 votes
Le GUID est unique dans le monde entier et l'UUID est unique dans l'univers. Choisissez judicieusement !