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


Je vois ces 2 acronymes jetés autour, et je me demandais s'il y a des différences entre un GUID et un UUID?


703
2017-10-29 14:09


origine


Réponses:


GUID est l'implémentation de Microsoft de la norme UUID.

Par Wikipédia:

Le terme GUID se réfère généralement à la mise en œuvre de Microsoft de la Identifiant universel unique (UUID) standard.

Une citation mise à jour de ce même article de Wikipédia:

La RFC 4122 elle-même indique que les UUID "sont aussi connus sous le nom de GUID". Tout ceci suggère que "GUID", tout en se référant à l'origine à une variante d'UUID utilisée par Microsoft, est devenu simplement un nom alternatif pour UUID ...


599
2017-10-29 14:10



le réponse simple est: aucune différence, Ce sont les mêmes choses. Traitez-les comme une valeur de 16 octets (128 bits) utilisée comme valeur unique. Dans Microsoft-speak, ils sont appelés GUID, mais appelez-les UUID lorsqu'ils n'utilisent pas Microsoft-speak.

Même les auteurs de la spécification UUID et Microsoft prétendent qu'ils sont synonymes:

  • De l'introduction à l'IETF RFC 4122 "Un espace de noms URN d'identifiant unique universel (UUID)":" un espace de nom de nom de ressource uniforme pour les UUID (Universally Unique IDentifier), également connu sous le nom de GUID (Globally Unique IDentifier). "

  • Du Recommandation UIT-T X.667, Norme internationale ISO / CEI 9834-8: 2004: "Les UUID sont également connus sous le nom d'identificateurs globaux uniques (GUID), mais ce terme n'est pas utilisé dans la présente Recommandation."

  • Et Microsoft même réclamations un GUID est spécifié par le RFC UUID: "Dans la programmation Microsoft Windows et dans les systèmes d'exploitation Windows, un identificateur global unique (GUID), comme spécifié dans [RFC4122], est ... Le terme identificateur universellement unique (UUID) est parfois utilisé dans les spécifications de protocole Windows en tant que synonyme de GUID. "

Mais le bonne réponse dépend de ce que la question signifie quand il dit "UUID" ...

La première partie dépend de ce que le demandeur pense quand il dit "UUID".

La revendication de Microsoft implique que tous les UUID sont des GUID. Mais tous les GUID sont-ils de vrais UUID? C'est-à-dire, l'ensemble de tous les UUID est-il juste un sous-ensemble approprié de l'ensemble de tous les GUID, ou est-ce exactement le même ensemble?

En regardant les détails de la RFC 4122, il existe quatre "variantes" différentes d'UUID. Ceci est principalement dû au fait que de tels identifiants de 16 octets étaient utilisés avant que ces spécifications ne soient rassemblées dans la création d'une spécification UUID. De la section 4.1.1 de RFC 4122, les quatre variantes de UUID sont:

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

Selon la RFC 4122, tous les UUID variantes sont de vrais UUID, alors tous les GUID sont de véritables UUID. Pour la question littérale "existe-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 GUID ne sont pas une variante 2 UUID (par exemple, Microsoft COM a des GUID qui sont des UUID de variante 3). Si la question était "Y a-t-il une différence entre GUID et UUID Variante 2", alors la réponse serait oui - ils peuvent être différents. Quelqu'un qui pose la question ne sait probablement pas variantes et ils pourraient penser seulement de une variante 2 UUID quand ils disent le mot "UUID" (par exemple, ils connaissent vaguement l'adresse MAC + temps et les formes d'algorithmes de nombres aléatoires de UUID, qui sont à la fois versions de une 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 demande le mot «UUID». Veulent-ils dire l'UUID de la variante 2 (parce que c'est la seule variante qu'ils connaissent) ou tous les UUID?

La deuxième partie dépend de la spécification utilisée comme définition de l'UUID.

Si vous pensez que c'était déroutant, lisez le UIT-T X.667 ISO / CEI 9834-8: 2004 qui est censé être aligné et entièrement compatible techniquement avec RFC 4122. Il contient une phrase supplémentaire à l'article 11.2 qui dit: "Tous les UUID conformes à la présente Recommandation | Norme internationale doivent avoir des bits variant avec le bit 7 de l'octet 7 mis à 1 et le bit 6 de l'octet 7 mis à 0". Ce qui signifie que seulement une variante 2 UUID sont conformes à cette norme (ces deux valeurs binaires une variante 2). Si tel est le cas, tous les GUID ne sont pas des UUID conformes à l'UIT-T / ISO / CEI, car les UUID conformes à l'UIT-T / ISO / CEI ne peuvent être une variante 2 valeurs.

Par conséquent, la vraie réponse dépend également de la spécification de l'UUID à laquelle la question est posée. En supposant que nous parlons clairement de tous les UUID et pas seulement des UUID de la variante 2: il y a aucune différence entre le GUID et les UUID de l'IETF, mais oui différence entre GUID et conforme UIT-T / ISO / IEC UUID!

Les codages binaires peuvent différer

Lorsqu'il est codé en binaire (par opposition au format de texte lisible par l'homme), le GUID peut être stocké dans une structure avec quatre champs différents comme suit. Ce format diffère de Norme UUID 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

657
2017-08-05 08:01



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


14
2017-10-29 14:10



GUID a une utilisation de longue date dans les zones où il n'est pas nécessairement une valeur de 128 bits de la même manière qu'un UUID. Par exemple, le La spécification RSS définit les GUID Pour être une chaîne de votre choix, tant qu'elle est unique, avec un attribut "isPermalink" pour spécifier que la valeur que vous utilisez est juste un lien permanent vers l'élément en cours de syndication.


7
2017-07-05 16:26



J'ai écrit une méthode pour convertir Guid byte array en UUID en Java, j'espère que ça aide:

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;
    }
}

3
2018-06-26 01:17



Microsoft guid peut être sous la forme d'un uuid étant entouré de deux accolades {}...


2
2017-12-06 15:01



Mon implémentation pour convertir l'ordre des octets UUID de Java en GUID

/**
 * Fix for endian differences between UUID and GUIDS 
 *
 * @param uuid
 * @return
 */
protected static byte[] UuidToGuidByteArray(UUID uuid)
{
    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(uuid.getMostSignificantBits());
    bb.putLong(uuid.getLeastSignificantBits());

    byte[] out = bb.array();
    byte swap;

    //swap first 4
    swap = out[0];
    out[0] = out[3];
    out[3] = swap;

    swap = out[1];
    out[1] = out[2];
    out[2] = swap;

    //swap next 2
    swap = out[4];
    out[4] = out[5];
    out[5] = swap;

    //swap next 2
    swap = out[6];
    out[6] = out[7];
    out[7] = swap;

    return out;
}

1
2018-03-21 17:25