Czy jest jakaś różnica między GUID a UUID?

Widzę te 2 akronimy rzucone wokół, i zastanawiałem się, czy są jakieś różnice między GUID i UUID?

 725
Author: Ry-, 2008-10-29

7 answers

GUID jest implementacją standardu uuid firmy Microsoft.

Per Wikipedia :

Termin GUID zazwyczaj odnosi się do implementacji standardu Universally Unique Identifier (uuid) firmy Microsoft.

Zaktualizowany cytat z tego samego artykułu na Wikipedii:

RFC 4122 sam stwierdza, że UUIDs "są również znane jako GUIDs". Wszystko to sugeruje ,że "GUID", choć pierwotnie odnosił się do wariantu UUID używanego przez Microsoft, ma stań się po prostu alternatywną nazwą dla UUID ...

 615
Author: bdukes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-04 16:13:10

Prosta odpowiedź brzmi: bez różnicy , są to te same rzeczy. Traktuj je jako 16-bajtową (128-bitową) wartość, która jest używana jako unikalna wartość. W Microsoft-speak są one nazywane GUID, ale nazywają je uuid, gdy nie używają Microsoft-speak.

Nawet autorzy specyfikacji UUID i Microsoft twierdzą, że są synonimami:

  • Od wprowadzenia do IETF RFC 4122 "a Universally Unique IDentifier (UUID) URN Namespace": "a Uniform Resource Name przestrzeń nazw dla uuid( Universal Unique IDentifier), znany również jako GUID (Globally Unique IDentifier)."

  • Od ITU-T zalecenie X. 667, ISO / IEC 9834-8: 2004 International Standard: "uuid są również znane jako globalnie unikalnych identyfikatorów (GUID), ale termin ten nie jest używany w tym zaleceniu."

  • A Microsoft nawet twierdzi GUID jest określony przez uuid RFC: "w programowaniu Microsoft Windows i w Systemy operacyjne Windows, globalnie unikalny identyfikator (GUID), jak określono w [RFC4122], jest ... Termin Universal unique identifier (uuid) jest czasami używany w specyfikacjach protokołu Windows jako synonim GUID."

Ale poprawna odpowiedź zależy od tego, co oznacza pytanie, gdy mówi "UUID"...

Pierwsza część zależy od tego, co myśli pytający, gdy mówi "UUID".

Twierdzenie Microsoftu sugeruje, że wszystkie uuid są Guidami. Ale są wszystkie GUIDs prawdziwe UUIDs? Oznacza to, że zbiór wszystkich uuid jest tylko właściwym podzbiorem zbioru wszystkich GUID, czy jest dokładnie tym samym zbiorem?

Patrząc na szczegóły RFC 4122, istnieją cztery różne "warianty" uuid. Dzieje się tak głównie dlatego, że takie 16-bajtowe identyfikatory były używane przed połączeniem tych specyfikacji przy tworzeniu specyfikacji UUID. Z sekcji 4.1.1 RFC 4122 , cztery warianty UUID to:

  1. zastrzeżone, Zgodność wsteczna systemu obliczeniowego sieci
  2. W przeciwieństwie do innych języków, w których istnieje wiele języków, istnieje wiele języków.]}
  3. Reserved, Microsoft Corporation kompatybilność wsteczna
  4. zarezerwowane dla przyszłej definicji.
Zgodnie z RFC 4122, wszystkie warianty UUID są "prawdziwymi Uuidami", wtedy wszystkie GUID są prawdziwymi uuidami. Na dosłowne pytanie "czy jest jakaś różnica między GUID i UUID" odpowiedź brzmi zdecydowanie nie dla uuid RFC 4122: no difference (ale z zastrzeżeniem drugiej części poniżej). Nie wszystkie GUID są variant 2 uuid (np. Microsoft COM ma GUID, które są wariantem 3 uuid). Gdyby pytanie brzmiało "czy jest jakaś różnica między GUID i uuid wariantu 2", odpowiedź brzmiałaby tak - mogą być różne. Ktoś zadający pytanie prawdopodobnie nie wie o wariantach i może myśleć tylko o wariancie 2 Uuidach, gdy wymawiają słowo " UUID "(np. niejasno znają adres MAC+czas i algorytmy liczb losowych UUID, które są obie wersjami z wariantu 2). W takim przypadku odpowiedź brzmi tak inaczej .

Więc odpowiedź, w części, zależy od tego, co osoba pytająca myśli, kiedy mówi słowo "UUID". Czy mają na myśli wariant 2 UUID (ponieważ jest to jedyny wariant, którego są świadomi) czy wszystkie uuid?

Druga część zależy od tego, który specyfikacja jest używana jako definicja UUID.

Jeśli uważasz, że to było mylące, przeczytaj ITU-T X. 667 ISO / IEC 9834-8: 2004 , który ma być wyrównany i w pełni kompatybilny technicznie z RFC 4122 . Ma dodatkowe zdanie w klauzuli 11.2, które mówi: "Wszystkie uuid zgodne z tym zaleceniem / międzynarodowym standardem powinny mieć bity wariantowe z bitem 7 oktetu 7 ustawionym na 1 i bitem 6 oktetu 7 ustawionym na 0". Co oznacza, że tylko variant 2 UUID zgodność z tym standardem (te dwie wartości bitowe oznaczają variant 2). Jeśli to prawda, to nie wszystkie identyfikatory GUID są zgodne z uuid ITU-T/ISO/IEC, ponieważ zgodne uuid ITU-T/ISO/IEC mogą być tylko variant 2 wartości.

Dlatego prawdziwa odpowiedź zależy również od specyfikacji UUID, o którą pyta pytanie. Zakładając, że wyraźnie mówimy o wszystkich uuid, a nie tylko o wariancie 2 uuid: nie ma różnicy między uuid GUID a IETF, ale tak różnica Pomiędzy GUID i zgodnymi ITU-T / ISO / IEC uuid!

Kodowanie binarne może się różnić

Gdy kodowany jest w formacie binarnym (w przeciwieństwie do formatu tekstu czytelnego dla człowieka), GUID może być przechowywany w strukturze z czterema różnymi polami w następujący sposób. Format ten różni się od standardu uuid tylko w kolejności bajtów pierwszych 3 pól.

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
 670
Author: Hoylen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-05 17:57:10

Niezupełnie. GUID jest bardziej zorientowany na Microsoft, podczas gdy UUID jest używany szerzej (np. w schemacie URN urn:uuid: oraz w CORBA).

 14
Author: Mark Cidade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-29 14:10:59

GUID od dawna jest używany w obszarach, w których niekoniecznie jest 128-bitową wartością w taki sam sposób jak uuid. Na przykład, specyfikacja RSS definiuje GUID jako dowolny wybrany przez Ciebie ciąg znaków, o ile jest unikalny, z atrybutem "isPermalink", aby określić, że wartość, której używasz, jest tylko permalink do elementu będącego syndykatem.

 7
Author: Tony Arcieri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-05 16:26:24

Napisałem metodę konwersji tablicy bajtów Guid na uuid w Javie, mam nadzieję, że to pomoże:

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
Author: Jason H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-26 01:17:51

Moja implementacja do konwersji z kolejności bajtów uuid Javy na 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;
}
 2
Author: Dori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 15:47:09

Microsoft guid może mieć postać uuid otoczonego dwoma nawiasami klamrowymi {}...

 2
Author: Chris Stryczynski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 15:01:26