969 votes

Y a-t-il une différence entre un GUID et un UUID ?

Ces deux acronymes sont souvent utilisés et je me demande s'il existe des différences entre un GUID et un UUID.

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...

917voto

Hoylen Points 3842

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 :

  1. Réservé, rétrocompatibilité du système informatique de réseau
  2. El variante spécifié dans la RFC 4122 (dont il existe cinq sous-variantes, appelées "versions")
  3. Réservé, compatibilité rétroactive de Microsoft Corporation
  4. Réservé pour une définition future.

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

40 votes

Plus informatif que la réponse choisie. Je pense que la réponse choisie est la réponse la plus simple à la question, cependant.

3 votes

Le tableau d'encodage binaire intégré dans la réponse est très utile. Tnx

2 votes

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.

680voto

bdukes Points 54833

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

43 votes

(Le G signifie Globalement)

503 votes

Tout comme Microsoft qui prend quelque chose qui fonctionne partout (l'univers) et le fait fonctionner dans un tout petit sous-ensemble (le globe) :)

35 votes

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

14voto

Mark Cidade Points 53945

Pas vraiment. GUID est plus centré sur Microsoft, tandis que UUID est utilisé plus largement (par exemple, comme dans le programme urn:uuid : schéma URN, et dans CORBA).

4 votes

Quelle est la définition et l'effet de la centricité Microsoft ?

8voto

Tony Arcieri Points 77

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é.

3voto

Jason H Points 61

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.com

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.

Powered by:

X