Generar UUID
Privado: tu archivo nunca se guarda
¿Qué versión?
Aquí aparece: 0 UUID generados.
Cómo funciona
Elige una versión
v4 para todo lo que deba ser imposible de adivinar. v7 para claves de base de datos. La diferencia se explica en la página en lugar de darse por sabida.
Elige cuántos
Uno, o hasta diez mil a la vez, con formato opcional: mayúsculas, llaves, sin guiones o como lista entre comillas lista para el código.
Cópialos
Cópialos todos o descárgalos como archivo de texto.
Versión 4 o versión 7, y por qué importa en una base de datos
Un UUID son 128 bits escritos como 32 dígitos hexadecimales con la conocida agrupación 8-4-4-4-12. Seis de esos bits se usan para indicar la versión y la variante, lo que deja 122 bits aleatorios en una versión 4: suficiente para generar mil millones por segundo durante un siglo y que siga siendo abrumadoramente improbable ver el mismo dos veces. Ese es todo su atractivo: dos sistemas que nunca se han comunicado pueden crear identificadores y dar por hecho que nunca van a coincidir.
Para que eso se cumpla, la aleatoriedad tiene que ser real, y aquí viene de la fuente aleatoria criptográfica y no de un generador de números aleatorios común. La diferencia importa cuando los identificadores se usan como tokens de acceso (un enlace para restablecer la contraseña, una URL para compartir que no se pueda adivinar), porque un generador predecible permite deducir el siguiente valor a partir de los anteriores. Con una fuente criptográfica no hay nada que predecir.
La versión 7 existe porque la versión 4 se comporta mal como clave primaria de una base de datos. Pone al principio una marca de tiempo de 48 bits en milisegundos y rellena el resto con aleatoriedad, así que los UUID generados en secuencia se ordenan en el orden en que se crearon. Parece un detalle estético y no lo es: una clave aleatoria reparte cada inserción por todo el índice, así que cada escritura toca una página distinta y la caché deja de ayudar, mientras que una clave ordenada por tiempo se agrega a un extremo. En una tabla grande, la diferencia en velocidad de inserción es considerable, y es la razón por la que se estandarizó v7.
La contrapartida es real y conviene sopesarla. Un UUID versión 7 le dice a cualquiera que lo vea aproximadamente cuándo se creó, al milisegundo, y una serie de ellos revela a qué ritmo creas registros. Para una clave interna no hay problema. Para un identificador expuesto en una URL (un número de pedido, un enlace a un documento, un ID de usuario) es una pequeña fuga de información que la versión 4 no tiene. Si ambas cosas importan, usa v7 para la clave primaria y v4 para todo lo público.
Si buscas otra cosa
Genéralos donde se usan. Todas las bases de datos y todos los lenguajes lo traen integrado (gen_random_uuid() en PostgreSQL, UUID() en MySQL, crypto.randomUUID() en JavaScript, uuid.uuid4() en Python), y generar un lote en un navegador para pegarlo en el código está bien para datos de prueba o un test, y está mal para cualquier cosa que se ejecute en producción.
Si el motivo para usar v7 es tener claves ordenables, hay alternativas que vale la pena conocer. ULID codifica la misma idea en 26 caracteres, más cortos y sin distinción entre mayúsculas y minúsculas; los identificadores Snowflake caben en 64 bits, lo que reduce a la mitad el tamaño del índice frente a los 128 de un UUID. Y en muchas bases de datos, un entero autoincremental de toda la vida sigue siendo más rápido y más pequeño que cualquiera de ellos: los UUID compensan su costo cuando los identificadores deben crearse en varios lugares a la vez, y no en otro caso.
Preguntas frecuentes
¿v4 o v7? ¿Cuál necesito?
Si es la clave primaria de una base de datos, v7. Si debe ser imposible de adivinar (un enlace para restablecer la contraseña, un código de invitación, un identificador de sesión), v4. Esa es toda la decisión, y la mayoría de la gente nunca se entera de que había una, porque casi todos los generadores solo ofrecen v4.
¿Por qué v4 es mala clave de base de datos?
Porque es completamente aleatorio, y el índice de una base de datos está ordenado. Las claves aleatorias nuevas caen en lugares aleatorios del índice, así que cada inserción toca una página distinta, la caché deja de ayudar, y el índice se fragmenta y crece. En una tabla grande y con mucha actividad, eso es una ralentización medible que empeora con el tiempo. No es una preocupación teórica: es la razón por la que la documentación de Postgres y la de MySQL ya lo tratan.
¿Qué es UUID v7?
Un UUID cuyos primeros 48 bits son una marca de tiempo en milisegundos, seguida de aleatoriedad. Sigue siendo único a nivel global y sigue teniendo 128 bits, pero como el tiempo va primero, los UUID v7 se ordenan en el orden en que se crearon. Las claves nuevas se agregan al final del índice en lugar de dispersarse por él, que es exactamente como se comporta un entero autoincremental, pero con la unicidad de un UUID. Se estandarizó en la RFC 9562 en 2024 y es la recomendación actual para tablas nuevas.
¿Los UUID v7 de aquí se ordenan de verdad?
Sí, incluso dentro del mismo milisegundo, que es la parte que la mayoría de las implementaciones hace mal. Una marca de tiempo solo tiene resolución de milisegundos, así que generar mil ID en un bucle termina dentro de uno solo, y con bits bajos puramente aleatorios esos mil NO quedan en el orden en que se crearon. Este generador usa el contador monótono que describe la RFC 9562, así que un lote queda en orden estrictamente ascendente, siempre. Genera mil y ordénalos: vuelven en el orden en que se crearon.
¿Es seguro exponer públicamente un UUID v7?
Con una cosa en mente: revela cuándo se creó, al milisegundo, por diseño. Para una clave de base de datos eso suele ser inofensivo o incluso útil. Pero si el momento de creación es en sí un dato sensible, o si necesitas que el identificador sea imposible de adivinar, usa v4: v7 sigue teniendo 74 bits aleatorios, que es muchísimo, pero su marca de tiempo la puede leer sin problema cualquiera que tenga el ID.
¿Son lo bastante aleatorios para ser seguros?
Sí. La aleatoriedad viene de `crypto.getRandomValues`, el generador criptográficamente seguro del navegador, nunca de `Math.random`. Esa diferencia ha causado vulnerabilidades reales: `Math.random` es rápido pero predecible, y se han adivinado en la práctica tokens de sesión basados en él. Un UUID v4 tiene 122 bits aleatorios, suficiente para que las colisiones no sean una preocupación práctica.
¿Se generan en mi dispositivo?
Sí, por completo, y con identificadores eso importa. Un UUID obtenido del servidor de otra persona es un UUID que otra persona ya vio, lo que anula el propósito si estás generando un secreto. Estos nunca salen de tu navegador. Una vez que la página haya cargado, desactiva el wifi y funciona exactamente igual. Es la forma más sencilla de comprobar por ti mismo lo que decimos sobre privacidad, en lugar de creernos.
¿Qué es el UUID nulo?
Todo ceros: 00000000-0000-0000-0000-000000000000. Es un UUID válido y reservado que se usa para indicar “ninguno” o “sin definir” donde no se puede usar null. Su opuesto, el UUID máximo, todo f, se usa a veces como centinela de ordenación. Ambos se ofrecen aquí porque de vez en cuando hacen falta y es incómodo escribirlos correctamente.
Conviene saber: Los UUID versión 4 salen de la fuente aleatoria criptográfica del navegador, no de Math.random, así que se pueden usar con seguridad como identificadores. La versión 7 incorpora una marca de tiempo en milisegundos, que es lo que permite ordenarlos bien, y también significa que revela aproximadamente cuándo se creó. No uses v7 donde eso importe.
Agrega esta herramienta a tu sitio web
Gratis para cualquier blog, página de clase o artículo de ayuda. Pega un fragmento de código y tus visitantes podrán usarla directamente en tu página.
Más Herramientas para desarrolladores
Generador de hash
MD5, SHA-1, SHA-256, SHA-384 y SHA-512
Codificar Base64
Convierte texto o un archivo a Base64
Formatear JSON
Convierte un JSON ilegible en uno legible
Decodificar JWT
Lee el contenido de un token de forma privada
Decodificar Base64
Convierte Base64 de nuevo en texto o en un archivo
Validar JSON
Descubre exactamente dónde falla tu JSON