Pregunta ¿Hay alguna diferencia entre un GUID y un UUID?


Veo estos 2 acrónimos lanzados, y me pregunto si hay alguna diferencia entre un GUID y un UUID.


703
2017-10-29 14:09


origen


Respuestas:


GUID es la implementación de Microsoft del estándar UUID.

Por Wikipedia:

El término GUID generalmente se refiere a la implementación de Microsoft del Identificador único universal (UUID) estándar.

Una cita actualizada de ese mismo artículo de Wikipedia:

El propio RFC 4122 establece que los UUID "también se conocen como GUID". Todo esto sugiere que "GUID", aunque originalmente se refería a una variante del UUID utilizado por Microsoft, se ha convertido simplemente en un nombre alternativo para UUID ...


599
2017-10-29 14:10



los respuesta simple es: ninguna diferencia, Ellos son la misma cosa. Trátelos como un valor de 16 bytes (128 bits) que se utiliza como un valor único. En Microsoft-talk, se llaman GUID, pero los llaman UUID cuando no usan Microsoft-speak.

Incluso los autores de la especificación UUID y Microsoft afirman que son sinónimos:

  • De la introducción al IETF RFC 4122 "Un identificador universalmente único (UUID) URN Namespace":" un espacio de nombre de Nombre de recurso uniforme para UUID (Universally Unique IDentifier), también conocido como GUID (Globally Unique IDentifier). "

  • Desde el Recomendación UIT-T X.667, Norma internacional ISO / CEI 9834-8: 2004: "Los UUID también se conocen como Identificadores únicos globales (GUID), pero este término no se utiliza en esta Recomendación".

  • Y Microsoft incluso reclamaciones un GUID es especificado por el UUID RFC: "En la programación de Microsoft Windows y en los sistemas operativos Windows, un identificador global único (GUID), como se especifica en [RFC4122], es ... El término identificador único universal (UUID) se usa a veces en las especificaciones de protocolo de Windows como sinónimo de GUID ".

Pero el respuesta correcta depende de lo que signifique la pregunta cuando dice "UUID" ...

La primera parte depende de lo que el asker está pensando cuando dicen "UUID".

La afirmación de Microsoft implica que todos los UUID son GUID. Pero, ¿todos los GUID son UUID reales? Es decir, ¿el conjunto de todos los UUID es solo un subconjunto propio del conjunto de todos los GUID, o es exactamente el mismo conjunto?

En cuanto a los detalles del RFC 4122, hay cuatro "variantes" diferentes de UUID. Esto se debe principalmente a que tales identificadores de 16 bytes estaban en uso antes de que esas especificaciones se combinaran en la creación de una especificación UUID. De la sección 4.1.1 de RFC 4122, El cuatro variantes de UUID son:

  1. Reservado, compatibilidad retroactiva del sistema de computación de red
  2. los variante especificado en RFC 4122 (de los cuales hay cinco subvariantes, que se llaman "versiones")
  3. Reservado, compatibilidad hacia atrás de Microsoft Corporation
  4. Reservado para una definición futura.

De acuerdo con RFC 4122, todos los UUID variantes son "UUID reales", entonces todos los GUID son UUID reales. A la pregunta literal "¿hay alguna diferencia entre GUID y UUID?" La respuesta es definitivamente no para los UUID de RFC 4122: ninguna diferencia(pero sujeto a la segunda parte a continuación).

Pero no todos los GUID son variante 2 UUID (por ejemplo, Microsoft COM tiene GUID que son variante 3 UUID). Si la pregunta era "¿hay alguna diferencia entre el GUID y la variante 2 UUID", entonces la respuesta sería sí, pueden ser diferentes. Alguien que hace la pregunta probablemente no sabe variantes y tal vez solo estén pensando en variante 2 UUID cuando dicen la palabra "UUID" (por ejemplo, conocen vagamente la dirección MAC + tiempo y los algoritmos de números aleatorios de UUID, que son ambos versiones de variante 2). En cuyo caso, la respuesta es sí diferente.

Entonces, la respuesta, en parte, depende de lo que la persona que pregunta piensa cuando dice la palabra "UUID". ¿Significan variante 2 UUID (porque esa es la única variante que conocen) o todos los UUID?

La segunda parte depende de qué especificación se utilice como definición de UUID.

Si crees que fue confuso, lee el UIT-T X.667 ISO / IEC 9834-8: 2004 que se supone que debe alinearse y ser totalmente compatible técnicamente con RFC 4122. Tiene una oración adicional en la cláusula 11.2 que dice: "Todos los UUID que se ajusten a esta Recomendación | Estándar internacional tendrán bits de variantes con el bit 7 del octeto 7 en 1 y el bit 6 del octeto 7 en 0". Lo que significa que solo variante 2 UUID se ajustan a ese estándar (esos dos valores de bit significan variante 2). Si eso es cierto, entonces no todos los GUID conforman los UUID de ITU-T / ISO / IEC, porque los UUID de ITU-T / ISO / IEC conformes solo pueden variante 2 valores

Por lo tanto, la respuesta real también depende de la especificación del UUID sobre el que se pregunta. Suponiendo que estamos hablando claramente de todos los UUID y no solo de los 2 UUID variantes: hay ninguna diferencia entre GUID y los UUID de IETF, pero sí diferencia entre GUID y conforme ¡UUID de ITU-T / ISO / IEC!

Las codificaciones binarias pueden diferir

Cuando está codificado en formato binario (a diferencia del formato de texto legible para humanos), el GUID puede ser almacenado en una estructura con cuatro campos diferentes de la siguiente manera. Este formato difiere del UUID estándar solo en el orden de bytes de los primeros 3 campos.

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



Realmente no. GUID está más centrado en Microsoft, mientras que UUID se usa más ampliamente (por ejemplo, como en urna: uuid: Esquema URN, y en CORBA).


14
2017-10-29 14:10



GUID tiene un uso prolongado en áreas donde no es necesariamente un valor de 128 bits de la misma manera que un UUID. Por ejemplo, el La especificación RSS define los GUID ser cualquier cadena de su elección, siempre que sea única, con un atributo "isPermalink" para especificar que el valor que está utilizando es solo un enlace permanente al elemento que se está sindicando.


7
2017-07-05 16:26



Escribí un método para convertir la matriz de bytes Guid en UUID en Java, espero que ayude:

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 puede ser en forma de uuid estando rodeado por dos llaves {}...


2
2017-12-06 15:01



Mi implementación para convertir de orden de bytes UUID de Java a GUID's

/**
 * 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