Saltar al contenido

Generador de UUID Gratuito - Cree UUID V1 y V4 al Instante

Genere identificadores únicos al instante con nuestro generador de UUID gratuito. Cree UUID de Versión 1 (basados en tiempo) y Versión 4 (aleatorios) para bases de datos, API y sistemas distribuidos.

Generador de UUID

Versión de UUID
UUID generado
Calculadora de carga...
📚

Documentación

Generador de UUID

Un generador de UUID es una herramienta que crea un identificador único universal, o UUID: un código de 128 bits que se usa para etiquetar un dato de modo que ningún otro elemento, en ningún lugar, tenga probablemente la misma etiqueta. Esta página genera UUID de la versión 1 (basados en el tiempo) y de la versión 4 (aleatorios).

¿Qué es un UUID?

Un UUID es un número de 128 bits escrito con 32 dígitos hexadecimales (los caracteres 0-9 y a-f). Se divide en cinco grupos separados por guiones, con el patrón 8-4-4-4-12, para un total de 36 caracteres. Un ejemplo de UUID tiene este aspecto:

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

Los UUID están definidos por un estándar de la Internet Engineering Task Force. La primera versión de ese estándar, la RFC 4122, se publicó en julio de 2005. Fue sustituida en mayo de 2024 por la RFC 9562, que deja obsoleta la RFC 4122 y añade nuevas versiones. El software usa los UUID para identificar filas de bases de datos, archivos y otros registros sin necesidad de una autoridad central que reparta números. Como el espacio de UUID posibles es tan grande, dos computadoras pueden generar UUID de forma independiente, en el mismo instante, y casi nunca producir el mismo.

Formato y estructura de un UUID

Los 128 bits de un UUID se dividen en campos con nombre. Cada campo ocupa un número fijo 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ón de los campos de 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

Cuatro bits dentro de time_hi_and_version marcan el número de versión del UUID, y dos bits dentro de clock_seq_hi_and_reserved marcan la variante, que indica al software cómo leer el resto de los campos.

Cómo generar un UUID con esta herramienta

  1. Elegir una versión: versión 1 (basada en el tiempo) o versión 4 (aleatoria).
  2. Seleccionar «Generar». La herramienta crea de inmediato un nuevo UUID de 128 bits.
  3. Seleccionar «Copiar» para copiar el resultado al portapapeles.
  4. Pegar el UUID en el código, en una base de datos o en un archivo de configuración.

La versión 4 sirve para la mayoría de los usos, como las claves de bases de datos, porque no contiene información sobre cuándo ni dónde se creó. La versión 1 registra el momento de su creación, lo que puede ayudar cuando se quiere saber cuándo se creó un registro.

UUID versión 1 frente a versión 4

La versión 1 codifica la marca de tiempo actual, junto con una secuencia de reloj y un valor de nodo. El estándar original permitía que el valor de nodo fuera la dirección de red (MAC) real de una computadora. El estándar más reciente dice que las direcciones MAC suponen riesgos para la privacidad y no deben usarse, y permite en su lugar un valor de nodo aleatorio. Esta herramienta siempre usa bits aleatorios para el nodo, por lo que sus UUID de versión 1 nunca leen ni exponen una dirección MAC real. Como exige el estándar para un nodo aleatorio, la herramienta pone en 1 el bit menos significativo del primer octeto del nodo (el bit de multidifusión), lo que marca el nodo como aleatorio y no como una dirección de red real. El reloj de la herramienta lee la hora en milisegundos, por lo que los pasos más pequeños de la marca de tiempo son siempre cero.

Los UUID de versión 1 no se ordenan por hora de creación como texto. La parte de la marca de tiempo que cambia más rápido, time_low, va primero, así que un UUID posterior puede quedar antes que uno anterior. La RFC 9562 añade la versión 6, una forma reordenada de la versión 1 para un mejor orden en bases de datos, y dice que los sistemas nuevos deben usar la versión 7 en lugar de las versiones 1 y 6 siempre que sea posible.

La versión 4 se construye con bits aleatorios, con unos pocos bits fijos que marcan la versión y la variante. No contiene marca de tiempo ni datos específicos de la máquina, por lo que no revela nada sobre cuándo ni dónde se creó. No se puede ordenar por orden de creación.

El estándar contempla otras versiones que esta herramienta no genera. La versión 2 está reservada para DCE Security. Las versiones 3 y 5 se construyen aplicando un hash a un espacio de nombres y a un nombre con MD5 o SHA-1, de modo que la misma entrada siempre produce el mismo UUID. Las versiones 6, 7 y 8 las añadió la RFC 9562.

Cómo calcular un UUID (fórmula)

Versión 4:

  1. Generar 128 bits aleatorios. La herramienta obtiene estos bits de la API Web Crypto (crypto.getRandomValues), una fuente criptográficamente segura; solo si esa API no está disponible recurre a Math.random.
  2. Fijar los cuatro bits de versión, el primer dígito hexadecimal del tercer grupo, en 0100 (hexadecimal 4).
  3. Fijar los dos bits superiores del cuarto grupo en 10 (de modo que el primer dígito hexadecimal de ese grupo sea 8, 9, a o b).

Solo 122 de los 128 bits son aleatorios, ya que 6 bits quedan fijados por los pasos 2 y 3. Eso da 2^122, o unos 5,3 × 10^36, UUID de versión 4 posibles.

Versión 1:

  1. Tomar la hora actual como un recuento de intervalos de 100 nanosegundos desde el 15 de octubre de 1582, la fecha de la reforma del calendario gregoriano. Esto rellena time_low, time_mid y parte de time_hi_and_version.
  2. Generar una secuencia de reloj aleatoria de 14 bits, que sirve para evitar duplicados si el reloj del sistema se retrasa.
  3. Generar un valor de nodo aleatorio de 48 bits y luego poner en 1 el bit de multidifusión (el bit menos significativo de su primer byte). La secuencia de reloj y el nodo salen de la misma extracción de Web Crypto que la versión 4, con el mismo recurso alternativo a Math.random.
  4. Fijar los bits de versión en 0001 y los bits de variante en 10.

Entre todas las versiones de UUID, el espacio completo de 128 bits contiene 2^128, o unos 3,4 × 10^38, valores posibles.

Ejemplo práctico

Tomemos el UUID de ejemplo anterior: 550e8400-e29b-41d4-a716-446655440000.

  • Tercer grupo, 41d4: el primer dígito es 4, lo que indica que es un UUID de versión 4.
  • Cuarto grupo, a716: el primer dígito, a (binario 1010), empieza por 10, los bits de variante exigidos.
  • Los dígitos hexadecimales restantes son la carga aleatoria.

Un programa que lee este UUID comprueba el 4 y el patrón 10 para confirmar el formato, y trata el resto como un valor opaco.

Usos habituales de los UUID

  • Claves primarias en bases de datos, especialmente cuando varios servidores crean registros al mismo tiempo sin consultarse entre sí.
  • Identificadores de archivos, eventos y recursos en sistemas distribuidos, como los microservicios.
  • ID de dispositivos en redes grandes, donde cada dispositivo puede generar su propio ID sin conexión.

Los UUID no deben usarse como contraseñas, secretos de sesión ni claves de API. El estándar dice que las implementaciones no deben usar los UUID como capacidades de seguridad, es decir, un ID que da acceso por el mero hecho de conocerse.

La principal contrapartida es el tamaño: un UUID ocupa 16 bytes de almacenamiento, frente a 4 u 8 bytes de un simple contador entero. Los UUID aleatorios, como la versión 4, tienen además una mala localidad en los índices de bases de datos: los valores nuevos caen en lugares aleatorios del índice, lo que puede ralentizar las inserciones.

Alternativas a los UUID

Los enteros autoincrementales son más pequeños y sencillos, pero no funcionan bien cuando más de un servidor necesita repartir ID de forma independiente. Se crearon varios esquemas de ID ordenados por tiempo para resolver el problema del orden, y la RFC 9562 los enumera como antecedentes, entre ellos Snowflake de Twitter y ULID. Un ULID tiene 128 bits, como un UUID, y es ordenable lexicográficamente, es decir, se ordena como texto según el orden de creación. Para los sistemas nuevos, el UUID de versión 7 ofrece la misma ventaja dentro del estándar UUID.

Historia del estándar UUID

Los UUID se usaron por primera vez en el Apollo Network Computing System, después en el Distributed Computing Environment de la Open Software Foundation y luego en Microsoft Windows. La Internet Engineering Task Force publicó la RFC 4122 en julio de 2005 y la sustituyó por la RFC 9562 en mayo de 2024.

Preguntas frecuentes

¿Para qué se usa un generador de UUID? Crea identificadores únicos para bases de datos, sistemas distribuidos e ID de dispositivos, de modo que no haya dos registros que tengan que compartir el mismo identificador.

¿Cuál es la diferencia entre UUID v1 y v4? La versión 1 codifica una marca de tiempo. La versión 4 es aleatoria salvo por sus bits de versión y variante, y no contiene marca de tiempo. La salida de versión 1 de esta herramienta usa un valor de nodo aleatorio en lugar de una dirección MAC real, por lo que no expone información que identifique la máquina.

¿La versión 1 expone mi dirección MAC? No con esta herramienta. El estándar original permitía que el campo de nodo de un UUID de versión 1 contuviera una dirección MAC real, pero este generador siempre rellena ese campo con bits aleatorios, con el bit de multidifusión activado para marcarlo como aleatorio.

¿Se garantiza que los UUID sean únicos? Ningún esquema de identificadores puede garantizar una unicidad absoluta, pero un UUID de versión 4 tiene unos 5,3 × 10^36 valores aleatorios posibles. La probabilidad de un duplicado es lo bastante pequeña como para ignorarla en casi cualquier uso práctico, siempre que los números aleatorios sean buenos.

¿Puedo usar un UUID como clave primaria de una base de datos? Sí. Los UUID funcionan bien como claves primarias en sistemas distribuidos porque cualquier nodo puede generar uno sin consultar a un servidor central. El costo es de 16 bytes de almacenamiento por clave y, en las versiones aleatorias, inserciones más lentas en tablas muy grandes.

¿Un UUID es lo mismo que un GUID? Sí. La RFC 9562 dice que los UUID también se conocen como GUID (Globally Unique IDentifiers, identificadores únicos globales), el nombre que se usa en las plataformas de Microsoft.

¿Se pueden ordenar por hora de creación los UUID de la versión 1 o de la versión 4? No como texto. La versión 4 es aleatoria, y la versión 1 pone primero la parte de su marca de tiempo que cambia más rápido. Para obtener ID que se ordenen por orden de creación, hay que usar el UUID de versión 7 o un ULID.

Referencias

  1. Internet Engineering Task Force. RFC 9562: Universally Unique IDentifiers (UUIDs). RFC 9562: deja obsoleta la RFC 4122 (mayo de 2024); 122 bits aleatorios en la versión 4; versiones 6 y 7 y la recomendación de preferir la versión 7; no deben usarse direcciones MAC; los UUID no deben ser capacidades de seguridad; mala localidad en el índice de la versión 4; historia de Apollo NCS, OSF DCE y Microsoft; GUID como otro nombre.
  2. Internet Engineering Task Force. RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122: publicada en julio de 2005; la marca de tiempo de la versión 1 cuenta intervalos de 100 nanosegundos desde el 15 de octubre de 1582.
  3. ULID project. Universally Unique Lexicographically Sortable Identifier. Especificación de ULID: compatibilidad de 128 bits con UUID y orden lexicográfico.