Salta al contingut

Generador de UUID Gratuït - Crea UUID V1 i V4 Instantàniament

Genera identificadors únics instantàniament amb el nostre generador de UUID gratuït. Crea UUID de Versió 1 (basat en temps) i Versió 4 (aleatori) per a bases de dades, API i sistemes distribuïts.

Generador d'UUID

Versió d'UUID
UUID generat
Calculadora de càrrega...
📚

Documentació

Generador de UUID

Un generador de UUID és una eina que crea un identificador universalment únic, o UUID: un codi de 128 bits que s’utilitza per etiquetar una dada de manera que sigui molt improbable que cap altre element, enlloc, comparteixi la mateixa etiqueta. Aquesta pàgina genera UUID de la versió 1 (basats en el temps) i de la versió 4 (aleatoris).

Què és un UUID?

Un UUID és un nombre de 128 bits escrit com 32 dígits hexadecimals (els caràcters 0–9 i a-f). Es divideix en cinc grups separats per guions, amb el patró 8-4-4-4-12, amb un total de 36 caràcters. Un UUID d’exemple té aquest aspecte:

1550e8400-e29b-41d4-a716-446655440000
2

Els UUID estan definits per l’RFC 9562, publicat per l’Internet Engineering Task Force el maig de 2024, que va substituir l’RFC anterior 4122 de 2005. Tots dos documents descriuen el mateix format de 128 bits. El programari els utilitza per identificar files de bases de dades, fitxers, sessions d’usuari i altres registres sense necessitat que una autoritat central assigni els nombres. Com que l’espai de UUID possibles és tan gran, dos ordinadors poden generar UUID de manera independent i al mateix moment, i gairebé mai no en produiran un d’igual.

Format i estructura dels UUID

Els 128 bits d’un UUID es divideixen en camps amb nom. Cada camp ocupa un nombre fix de bits:

  • time_low - 32 bits
  • time_mid - 16 bits
  • time_hi_and_version - 16 bits
  • clock_seq_hi_and_reserved - 8 bits
  • clock_seq_low - 8 bits
  • node - 48 bits
Disposició dels camps d’un UUID time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Quatre bits dins de time_hi_and_version contenen el número de versió de l’UUID, i dos bits dins de clock_seq_hi_and_reserved contenen la variant, que indica al programari com ha de llegir la resta dels camps. Es defineixen vuit versions.

Els noms dels camps anteriors provenen de la versió 1, en què realment contenen un valor de temps i un valor de node. Les altres versions mantenen la mateixa disposició 8-4-4-4-12 i els mateixos límits de camp, però omplen la major part dels bits amb dades aleatòries. En un UUID de la versió 4, el grup etiquetat time_low és aleatori, no pas un temps.

Com generar un UUID amb aquesta eina

  1. Trieu una versió: versió 1 (basada en el temps) o versió 4 (aleatòria).
  2. Llegiu el UUID a la caixa de resultats. N’apareix un de nou tan bon punt es carrega la pàgina o canvia la versió.
  3. Seleccioneu «Generate» per obtenir-ne un altre.
  4. Seleccioneu «Copy» per copiar el resultat al porta-retalls i, després, enganxeu-lo en codi, en una base de dades o en un fitxer de configuració.

El tauler situat sota el resultat divideix l’UUID en els seus cinc camps i n’anomena cadascun, cosa que facilita trobar el dígit de versió i el dígit de variant.

La versió 4 és adequada per a la majoria de tasques, incloses les claus de bases de dades i els testimonis de sessió, perquè no conté informació sobre quan ni on es va crear. La versió 1 és adequada per als registres l’hora de creació dels quals s’ha de poder recuperar a partir del mateix identificador, com ara les entrades de registre.

UUID de la versió 1 contra UUID de la versió 4

La versió 1 codifica la marca de temps actual, a més d’una seqüència de rellotge i un valor de node triats aleatòriament. L’estàndard permet que el valor de node sigui l’adreça de xarxa real (MAC) d’un ordinador, però també permet un valor de node generat aleatòriament com a alternativa que protegeix la privadesa. Aquesta eina utilitza sempre l’opció aleatòria: els seus UUID de la versió 1 mai no contenen ni exposen una adreça MAC real. L’estàndard també exigeix que el bit menys significatiu del primer byte del camp de node sigui 1 en un valor de node aleatori, i aquesta eina ho estableix així. Les targetes de xarxa reals mai no tenen aquest bit establert, de manera que un node aleatori no es pot confondre amb un de real. Per això el segon dígit hexadecimal del cinquè grup sempre és senar en un UUID de la versió 1 d’aquesta pàgina: 1, 3, 5, 7, 9, b, d o f.

La marca de temps dins d’un UUID de la versió 1 es pot recuperar, de manera que els registres es poden ordenar per data de creació. Ordenar el text de l’UUID no ho fa, perquè el primer grup conté els 32 bits menys significatius de la marca de temps, que es reinicien aproximadament cada 7 minuts. La versió 6, afegida a l’RFC 9562, emmagatzema la mateixa marca de temps amb els bits més significatius al davant, de manera que l’ordenació del text simple funciona.

La versió 4 es construeix a partir de bits aleatoris, amb uns quants bits fixats per indicar la versió i la variant. No conté cap marca de temps ni dades específiques de la màquina, de manera que no revela quan ni on es va crear. No es pot ordenar per ordre de creació.

L’estàndard defineix sis versions més, però aquesta eina no les genera: la versió 2 (DCE Security, d’ús poc freqüent); les versions 3 i 5, obtingudes calculant el resum criptogràfic d’un espai de noms i un nom amb MD5 o SHA-1, de manera que la mateixa entrada sempre produeix el mateix UUID; i les versions 6, 7 i 8, afegides per l’RFC 9562 el 2024 per a identificadors ordenables i personalitzats.

Com calcular un UUID (fórmula)

Versió 4:

  1. Genereu 128 bits aleatoris.
  2. Establiu els quatre bits de versió, el primer dígit hexadecimal del tercer grup, a 0100 (hex 4).
  3. Establiu els dos bits superiors del quart grup a 10 (de manera que el primer dígit hexadecimal d’aquest grup sigui 8, 9, a o b).

Només 122 dels 128 bits són realment aleatoris, ja que 6 bits es fixen als passos 2 i 3. Això dona 2^122, és a dir, aproximadament 5,3 × 10^36 UUID possibles de la versió 4.

Versió 1:

  1. Preneu l’hora actual com un recompte d’intervals de 100 nanosegons des de 15 d’octubre del 1582, la data de la reforma del calendari gregorià. A la pràctica, és l’hora Unix ordinària en mil·lisegons més 12.219.292.800.000, tot multiplicat per 10.000.
  2. Dividiu aquest recompte de 60 bits en tres camps: els 32 bits menys significatius van a time_low, els 16 següents a time_mid i els 12 superiors a time_hi_and_version.
  3. Genereu una seqüència de rellotge de 14 bits, que s’utilitza per evitar col·lisions si el rellotge del sistema es configura enrere.
  4. Genereu un valor de node de 48 bits, amb el bit menys significatiu del primer byte establert a 1.
  5. Establiu els bits de versió a 0001 i els bits de variant a 10.

En totes les versions d’UUID, l’espai complet de 128 bits conté 2^128, és a dir, aproximadament 3,4 × 10^38 valors possibles. Aquesta quantitat és tan gran que les col·lisions aleatòries no són una preocupació pràctica.

Exemple resolt

Lectura d’un UUID de la versió 4. Preneu l’exemple anterior: 550e8400-e29b-41d4-a716-446655440000.

  • Tercer grup, 41d4: el primer dígit és 4, que indica que és un UUID de la versió 4.
  • Quart grup, a716: el primer dígit, a (binari 1010), comença amb 10, els bits de variant requerits.
  • La resta dels dígits hexadecimals és la càrrega útil aleatòria.

Un programa que llegeix aquest UUID comprova el patró 4 i 10 per confirmar el format i, després, tracta la resta com un valor aleatori opac.

Construcció d’un UUID de la versió 1. Suposem que el rellotge indica 1.700.000.000.000 mil·lisegons de temps Unix, que corresponen al 14 de novembre del 2023, a les 22:13:20 UTC.

  1. Afegiu el desplaçament: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
  2. Multipliqueu per 10.000 per obtenir intervals de 100 nanosegons: 139,192,928,000,000,000. En hexadecimal és 01EE833B04AFC000.
  3. Dividiu-lo: time_low = 04AFC000 (els 8 dígits hexadecimals menys significatius), time_mid = 833B (els 4 següents) i els 12 bits superiors són 1EE.
  4. Poseu el dígit de versió 1 davant de 1EE, de manera que time_hi_and_version = 11EE.

L’UUID és, doncs, 04afc000-833b-11ee- seguit de la seqüència de rellotge i el valor de node. El programari pot invertir aquests quatre passos per recuperar el 14 de novembre del 2023 a partir de l’identificador.

Usos habituals dels UUID

  • Claus primàries en bases de dades, especialment quan diversos servidors creen registres al mateix temps sense comunicar-se entre si.
  • Testimonis de sessió i claus d’API, normalment de la versió 4 per la privadesa que proporcionen.
  • Identificadors de fitxers, esdeveniments i recursos en sistemes distribuïts com els microserveis.
  • Identificadors de dispositius en grans xarxes d’IoT, on cada dispositiu pot generar el seu identificador sense connexió.

El principal compromís és la mida: un UUID ocupa 16 bytes d’emmagatzematge, en comparació amb 4 o 8 bytes d’un comptador enter simple, i algunes bases de dades indexen els UUID més lentament que els enters seqüencials.

Alternatives als UUID

Els enters autoincrementals són més petits i senzills, però no funcionen bé quan més d’un servidor ha d’assignar identificadors de manera independent. Els identificadors Snowflake, desenvolupats a Twitter, combinen una marca de temps amb un identificador de màquina per produir identificadors compactes i ordenables en un sistema distribuït. Els ULID (identificadors universalment únics ordenables lexicogràficament) són un format més recent dissenyat per ser alhora aleatori i ordenable per hora de creació, a diferència d’un UUID estàndard de la versió 4.

Història de l’estàndard UUID

El concepte d’UUID va començar als anys 1980 a Apollo Computer, com a part del seu Network Computing System. Més tard, l’Open Software Foundation va adoptar el format per al seu Distributed Computing Environment. L’Internet Engineering Task Force va publicar l’RFC 4122 el 2005 i el va substituir per l’RFC 9562 el maig de 2024. L’RFC 9562 manté el funcionament inalterat de totes les versions anteriors i afegeix les versions 6, 7 i 8.

Preguntes freqüents

Per a què serveix un generador de UUID? Crea identificadors únics per a bases de dades, sistemes distribuïts, testimonis de sessió, claus d’API i identificadors de dispositius, de manera que dos registres no hagin de compartir el mateix identificador.

Quina diferència hi ha entre UUID v1 i v4? La versió 1 codifica una marca de temps que el programari pot recuperar per conèixer l’hora de creació. La versió 4 és completament aleatòria i no conté cap marca de temps. El resultat de la versió 1 d’aquesta eina utilitza un valor de node generat aleatòriament en lloc d’una adreça MAC real, de manera que tampoc no exposa informació que identifiqui la màquina.

La versió 1 exposa la meva adreça MAC? No amb aquesta eina. L’estàndard permet que el camp de node d’un UUID de la versió 1 contingui una adreça MAC real, però aquest generador sempre omple el camp amb bits aleatoris i estableix el bit que indica que el valor no és una adreça de xarxa real.

Els UUID tenen garantida la unicitat? No hi ha cap esquema d’identificadors que pugui garantir una unicitat absoluta, però l’espai de 128 bits conté aproximadament 3,4 × 10^38 valors possibles, i un UUID aleatori de la versió 4 té aproximadament 5,3 × 10^36 valors possibles. La probabilitat d’un duplicat és prou petita per ignorar-la en gairebé qualsevol ús pràctic.

Puc utilitzar un UUID com a clau primària d’una base de dades? Sí. Els UUID funcionen bé com a claus primàries en sistemes distribuïts perquè qualsevol node en pot generar un sense consultar un servidor central. El cost és de 16 bytes d’emmagatzematge per clau, més que un enter habitual, i el rendiment de l’índex pot ser més lent en taules molt grans.

Un UUID és el mateix que un GUID? Sí. GUID (identificador globalment únic) és el nom de Microsoft per al mateix concepte definit per l’RFC 4122 com a UUID.

Es poden ordenar els UUID de la versió 4 per hora de creació? No. Els UUID de la versió 4 són aleatoris, de manera que no contenen informació sobre quan es van crear. Un UUID de la versió 1 sí que en conté, però primer s’ha de descodificar; ordenar el text no dona l’ordre de creació. La versió 6, la versió 7 i els ULID estan dissenyats per ordenar-se directament com a text.

Referències

  1. Davis, K., Peabody, B., i Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M., i Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. Identificador universalment únic. A Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Identificador Snowflake. A Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. Especificació ULID. GitHub. https://github.com/ulid/spec