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: crea UUID de las versiones 1 y 4

Un generador de UUID es una herramienta que crea un identificador único universal, o UUID: un código de 128 bits utilizado para etiquetar un dato de modo que sea muy poco probable que otro elemento, en cualquier lugar, comparta 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 como 32 dígitos hexadecimales (los caracteres 0-9 y a-f). Se divide en cinco grupos separados por guiones, siguiendo el patrón 8-4-4-4-12, con un total de 36 caracteres. Un UUID de ejemplo es el siguiente:

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

Los UUID están definidos por la RFC 9562, publicada por el Grupo de Trabajo de Ingeniería de Internet en mayo de 2024, que sustituyó a la RFC 4122 de 2005. Ambos documentos describen el mismo formato de 128 bits. El software los utiliza para identificar filas de bases de datos, archivos, sesiones de usuario y otros registros sin necesidad de que una autoridad central asigne los números. Como el espacio de UUID posibles es tan grande, dos ordenadores pueden generar UUID de forma independiente y al mismo tiempo sin producir casi nunca el mismo valor.

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
Distribució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 contienen el número de versión del UUID, y dos bits dentro de clock_seq_hi_and_reserved contienen la variante, que indica al software cómo debe leer el resto de los campos. Hay ocho versiones definidas.

Los nombres de los campos anteriores proceden de la versión 1, en la que realmente contienen un valor de tiempo y un valor de nodo. Las demás versiones mantienen la misma disposición 8-4-4-4-12 y los mismos límites entre campos, pero rellenan la mayoría de los bits con datos aleatorios. En un UUID de la versión 4, el grupo etiquetado como time_low es aleatorio, no representa un tiempo.

Cómo generar un UUID con esta herramienta

  1. Elija una versión: versión 1 (basada en el tiempo) o versión 4 (aleatoria).
  2. Lea el UUID en el cuadro de resultados. Aparece uno nuevo en cuanto se carga la página o cambia la versión.
  3. Seleccione «Generar» para crear otro.
  4. Seleccione «Copiar» para copiar el resultado al portapapeles y, después, péguelo en el código, una base de datos o un archivo de configuración.

El panel situado debajo del resultado divide el UUID en sus cinco campos y da nombre a cada uno, de modo que los dígitos de la versión y de la variante sean fáciles de localizar.

La versión 4 resulta adecuada para la mayoría de los usos, incluidas las claves de bases de datos y los tokens de sesión, porque no contiene información sobre cuándo ni dónde se creó. La versión 1 es apropiada para registros cuyo momento de creación deba poder recuperarse a partir del propio identificador, como las entradas de registro.

UUID de versión 1 frente a versión 4

La versión 1 codifica la marca de tiempo actual, además de una secuencia de reloj y un valor de nodo elegidos aleatoriamente. El estándar permite que el valor de nodo sea la dirección de red real (MAC) de un ordenador, pero también permite un valor de nodo generado aleatoriamente como alternativa para proteger la privacidad. Esta herramienta siempre utiliza la opción aleatoria: sus UUID de versión 1 nunca leen ni exponen una dirección MAC real. El estándar también exige que el bit menos significativo del primer byte del campo de nodo sea 1 cuando el valor de nodo es aleatorio, y esta herramienta lo establece así. Las tarjetas de red reales nunca tienen ese bit establecido, por lo que un nodo aleatorio nunca puede confundirse con uno real. Por eso el segundo dígito hexadecimal del quinto grupo siempre es impar en un UUID de versión 1 de esta página: 1, 3, 5, 7, 9, b, d o f.

La marca de tiempo dentro de un UUID de versión 1 puede leerse posteriormente, por lo que los registros pueden ordenarse por fecha de creación. Ordenar el texto del UUID no produce ese resultado, porque el primer grupo contiene los 32 bits menos significativos de la marca de tiempo, que vuelven a empezar aproximadamente cada 7 minutos. La versión 6, añadida en la RFC 9562, almacena la misma marca de tiempo con los bits más significativos primero, de modo que la ordenación del texto funciona directamente.

La versión 4 se construye a partir de bits aleatorios, con algunos bits fijados para indicar la versión y la variante. No contiene una marca de tiempo ni datos específicos de la máquina, por lo que no revela cuándo ni dónde se creó. No puede ordenarse por fecha de creación.

El estándar define otras seis versiones, pero esta herramienta no las genera: la versión 2 (seguridad DCE, de uso poco frecuente); las versiones 3 y 5, construidas mediante el hash de un espacio de nombres y un nombre con MD5 o SHA-1, de modo que la misma entrada siempre produce el mismo UUID; y las versiones 6, 7 y 8, añadidas por la RFC 9562 en 2024 para crear identificadores ordenables y personalizados.

Cómo calcular un UUID (fórmula)

Versión 4:

  1. Genere 128 bits aleatorios.
  2. Establezca los cuatro bits de versión, que corresponden al primer dígito hexadecimal del tercer grupo, en 0100 (hexadecimal 4).
  3. Establezca los dos bits superiores del cuarto grupo en 10 (por lo que el primer dígito hexadecimal de ese grupo es 8, 9, a o b).

Solo 122 de los 128 bits son realmente aleatorios, ya que 6 bits quedan fijados por los pasos 2 y 3. Esto proporciona 2^122, es decir, aproximadamente 5,3 × 10^36 UUID de versión 4 posibles.

Versión 1:

  1. Tome la hora actual como un recuento de intervalos de 100 nanosegundos desde el 15 de octubre de 1582, fecha de la reforma del calendario gregoriano. En la práctica, se trata del tiempo Unix ordinario en milisegundos más 12.219.292.800.000, todo ello multiplicado por 10.000.
  2. Divida ese recuento de 60 bits entre tres campos: los 32 bits menos significativos van en time_low, los 16 siguientes en time_mid y los 12 superiores en time_hi_and_version.
  3. Genere una secuencia de reloj de 14 bits, utilizada para evitar colisiones si el reloj del sistema se ajusta hacia atrás.
  4. Genere un valor de nodo de 48 bits, con el bit menos significativo de su primer byte establecido en 1.
  5. Establezca 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, es decir, aproximadamente 3,4 × 10^38 valores posibles. La cantidad es tan grande que las colisiones aleatorias no constituyen un problema práctico.

Ejemplo práctico

Lectura de un UUID de versión 4. Tome el ejemplo anterior: 550e8400-e29b-41d4-a716-446655440000.

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

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

Construcción de un UUID de versión 1. Suponga que el reloj indica 1.700.000.000.000 milisegundos de tiempo Unix, lo que corresponde al 14 de noviembre de 2023 a las 22:13:20 UTC.

  1. Añada el desplazamiento: 1.700.000.000.000 + 12.219.292.800.000 = 13.919.292.800.000 ms.
  2. Multiplique por 10.000 para obtener intervalos de 100 nanosegundos: 139.192.928.000.000.000. En hexadecimal es 01EE833B04AFC000.
  3. Divídalo: time_low = 04AFC000 (los 8 últimos dígitos hexadecimales), time_mid = 833B (los 4 siguientes) y los 12 bits superiores son 1EE.
  4. Coloque el dígito de versión 1 delante de 1EE, lo que da time_hi_and_version = 11EE.

El UUID resultante es 04afc000-833b-11ee-, seguido de la secuencia de reloj y el valor de nodo. El software puede invertir estos cuatro pasos para recuperar el 14 de noviembre de 2023 a partir del identificador.

Usos habituales de los UUID

  • Claves primarias en bases de datos, especialmente cuando varios servidores crean registros al mismo tiempo sin comunicarse entre sí.
  • Tokens de sesión y claves de API, normalmente de la versión 4 por la privacidad que proporcionan.
  • Identificadores de archivos, eventos y recursos en sistemas distribuidos, como los microservicios.
  • Identificadores de dispositivos en grandes redes del Internet de las cosas (IoT), donde cada dispositivo puede generar su propio identificador sin conexión.

La principal desventaja es el tamaño: un UUID ocupa 16 bytes de almacenamiento, frente a los 4 u 8 bytes de un contador entero simple, y algunas bases de datos indexan los UUID más lentamente que los enteros secuenciales.

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 asignar identificadores de forma independiente. Los identificadores Snowflake, desarrollados en Twitter, combinan una marca de tiempo con un identificador de trabajador para producir identificadores compactos y ordenables en un sistema distribuido. Los ULID (identificadores universalmente únicos ordenables lexicográficamente) son un formato más reciente, diseñado para ser aleatorio y ordenable por fecha de creación, a diferencia de un UUID de versión 4 estándar.

Historia del estándar UUID

El concepto de UUID comenzó en la década de 1980 en Apollo Computer, como parte de su Network Computing System. Más tarde, la Open Software Foundation adoptó el formato para su Distributed Computing Environment. El Grupo de Trabajo de Ingeniería de Internet publicó la RFC 4122 en 2005 y la sustituyó por la RFC 9562 en mayo de 2024. La RFC 9562 mantiene sin cambios el funcionamiento de todas las versiones anteriores y añade las versiones 6, 7 y 8.

Preguntas frecuentes

¿Para qué sirve un generador de UUID?
Crea identificadores únicos para bases de datos, sistemas distribuidos, tokens de sesión, claves de API e identificadores de dispositivos, de modo que dos registros no 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 que el software puede leer posteriormente para recuperar el momento de creación. La versión 4 es completamente aleatoria y no contiene una marca de tiempo. La salida de versión 1 de esta herramienta utiliza un valor de nodo generado aleatoriamente en lugar de una dirección MAC real, por lo que tampoco expone información que identifique la máquina.

¿La versión 1 expone mi dirección MAC?
No con esta herramienta. El estándar permite que el campo de nodo de un UUID de versión 1 contenga una dirección MAC real, pero este generador siempre rellena ese campo con bits aleatorios y establece el bit que indica que el valor no es una dirección de red real.

¿Los UUID tienen garantizada la unicidad?
No existe ningún esquema de identificadores que pueda garantizar una unicidad absoluta, pero el espacio de 128 bits contiene aproximadamente 3,4 × 10^38 valores posibles, y un UUID de versión 4 tiene aproximadamente 5,3 × 10^36 valores aleatorios posibles. La probabilidad de duplicación es suficientemente pequeña como para ignorarla en casi cualquier uso práctico.

¿Puedo utilizar 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 coste es de 16 bytes de almacenamiento por clave, más que un entero habitual, y el rendimiento del índice puede ser menor en tablas muy grandes.

¿Un UUID es lo mismo que un GUID?
Sí. GUID (identificador único global) es el nombre de Microsoft para el mismo concepto que la RFC 4122 define como UUID.

¿Se pueden ordenar los UUID de versión 4 por fecha de creación?
No. Los UUID de versión 4 son aleatorios, por lo que no contienen información sobre cuándo se crearon. Un UUID de versión 1 sí contiene esa información, pero primero debe decodificarse; ordenar el texto no proporciona el orden de creación. La versión 6, la versión 7 y los ULID están diseñados para ordenarse directamente como texto.

Referencias

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