guid - genera - uuid npm
¿Hay alguna diferencia entre un GUID y un UUID? (7)
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;
}
}
¿Veo estos 2 acrónimos y me pregunto si hay alguna diferencia entre un GUID y un UUID?
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 estándar de identificador único universal (UUID).
Una cita actualizada de ese mismo artículo de Wikipedia:
RFC 4122 indica que los UUID "también se conocen como GUID". Todo esto sugiere que "GUID", al referirse originalmente a una variante de UUID utilizada por Microsoft, se ha convertido simplemente en un nombre alternativo para UUID ...
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, la especificación de RSS define a los GUID como cualquier cadena de su elección, siempre que sea única, con un atributo de "Enlace permanente" para especificar que el valor que está utilizando es solo un enlace permanente al elemento que se está sindicando.
La guid
de Microsoft puede tener la forma de un uuid rodeado por dos llaves {}
...
La respuesta simple es: no hay diferencia , son la misma cosa. Trátelos como un valor de 16 bytes (128 bits) que se utiliza como un valor único. En Microsoft-speak se denominan GUID, pero llámelos UUID cuando no usen Microsoft-speak.
Incluso los autores de la especificación UUID y Microsoft afirman que son sinónimos:
De la introducción a IETF RFC 4122 " Un IDentificador Universal Único (UUID) URN Espacio de Nombres": "un espacio de nombres de Recursos Uniformes para los UUID (Identificador Universal Único), también conocido como GUIDs (Identificador Global Único)."
De la 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 claims el UUID RFC especifica un GUID: "En la programación de Microsoft Windows y en los sistemas operativos Windows, un identificador único global (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 la respuesta correcta depende de lo que significa la pregunta cuando dice "UUID" ...
La primera parte depende de lo que piense el autor de la pregunta cuando digan "UUID".
La afirmación de Microsoft implica que todos los UUID son GUID. Pero, ¿son todos los UIDUs de GUIDs? Es decir, ¿es el conjunto de todos los UUID solo un subconjunto adecuado 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 los UUID. Esto se debe principalmente a que dichos identificadores de 16 bytes estaban en uso antes de que esas especificaciones se reunieran en la creación de una especificación UUID. De la sección 4.1.1 de RFC 4122 , las cuatro variantes de UUID son:
- Reservado, compatibilidad con sistemas de computación en red.
- La variante especificada en RFC 4122 (de las cuales hay cinco subvariantes, que se llaman "versiones")
- Reservado, compatibilidad con versiones anteriores de Microsoft Corporation.
- Reservado para futuras definiciones.
Según RFC 4122, todas las variantes de UUID son "UUID reales" y, a continuación, todas las GUID son UUID reales. Para la pregunta literal "¿hay alguna diferencia entre GUID y UUID?", La respuesta es definitivamente no para los UUID RFC 4122: no hay diferencia (pero está sujeto a la segunda parte a continuación).
Pero no todos los GUID son UUID de variante 2 (por ejemplo, Microsoft COM tiene GUID que son UUID de variante 3). Si la pregunta era "¿hay alguna diferencia entre los UUID GUID y la variante 2", entonces la respuesta sería sí? Pueden ser diferentes. Alguien que formule la pregunta probablemente no conozca las variantes y quizás solo esté pensando en los UUID de la variante 2 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 ambas versiones de la variante 2). En cuyo caso, la respuesta es sí diferente .
Entonces, la respuesta, en parte, depende de lo que la persona que pregunta está pensando cuando dice la palabra "UUID". ¿Significan UUID de la variante 2 (porque esa es la única variante que conocen) o todos los UUID?
La segunda parte depende de qué especificación se utiliza como la definición de UUID.
Si cree que fue confuso, lea el documento ITU-T X.667 ISO / IEC 9834-8: 2004 que se supone que está alineado y es totalmente compatible técnicamente con RFC 4122 . Tiene una oración adicional en la Cláusula 11.2 que dice: "Todos los UUID que cumplen con esta Recomendación | Norma Internacional tendrán bits de variante con el bit 7 del octeto 7 establecido en 1 y el bit 6 del octeto 7 establecido en 0". Lo que significa que solo el UUID de la variante 2 se ajusta a ese Estándar (esos dos valores de bit significan la variante 2) Si eso es cierto, entonces no todos los GUID son UUID ITU-T / ISO / IEC conformes, porque los UUID ITU-T / ISO / IEC conformes solo pueden ser valores de variante 2.
Por lo tanto, la respuesta real también depende de la especificación de UUID sobre la que se hace la pregunta. Suponiendo que estamos hablando claramente de todos los UUID y no solo los UUID de la variante 2: no hay ninguna diferencia entre los GUID y los UUID de IETF, pero sí, la diferencia entre los GUID y los UUID de ITU-T / ISO / IEC conformes.
Las codificaciones binarias pueden diferir
Cuando se codifica en binario (a diferencia del formato de texto legible por humanos), el GUID en.wikipedia.org/wiki/Globally_unique_identifier en una estructura con cuatro campos diferentes de la siguiente manera. Este formato difiere del estándar UUID 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
Mi implementación para convertir desde el orden de bytes UUID de Java a 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;
}
Realmente no. GUID está más centrado en Microsoft mientras que UUID se usa más ampliamente (por ejemplo, como en el esquema urn: uuid: URN, y en CORBA).