Generador UUID v4
Genera UUID v4 de forma segura en el navegador. Útil para datos de prueba y claves primarias. Genera de 1 a 100 a la vez.
Copiado
Otras herramientas
Artículos relacionados
📖 Dónde se suele tropezar
Genera de uno a cien UUID de versión 4 con crypto.randomUUID() de la API Web Crypto, con o sin guiones, por completo en el navegador. El objetivo de diseño de un UUID es sólo que los identificadores puedan acuñarse de forma única sin coordinación; no te da ni orden, ni significado, ni brevedad. La ausencia de esas tres cosas explica casi todos los problemas que aparecen al usarlos en una base de datos o en una URL.
| Caso | Qué ocurre | Qué hacer |
|---|---|---|
| Usarlo como clave primaria ralentiza la base de datos | Un UUID de versión 4 es totalmente aleatorio, así que las inserciones caen dispersas por todo el índice. Un árbol B es más eficiente cuando se le añade por el final, de modo que la inserción aleatoria provoca divisiones de página frecuentes y fragmenta el índice. En InnoDB de MySQL la clave primaria es el índice agrupado —los datos de la fila se ordenan por clave primaria—, con lo que el efecto es aún mayor: con decenas de millones de filas, insertar es varias veces más lento que con una clave secuencial y el índice crece en consecuencia. Además, guardarlo como CHAR(36) consume cuatro veces y media el espacio de un BIGINT secuencial de ocho bytes, en cada clave foránea y cada índice. |
Usa la versión 7, que ordena por tiempo: sus primeros 48 bits son una marca de tiempo Unix en milisegundos, así que los UUID se ordenan por orden de creación y las inserciones se concentran al final del árbol B. Mantiene la apariencia y la unicidad de un UUID y fue diseñada precisamente para resolver este problema (normalizada en la RFC 9562). Donde no dispongas de v7, mantén una clave primaria interna secuencial y guarda el UUID en una columna aparte para uso externo. Revisa también el tipo de almacenamiento: BINARY(16) en lugar de CHAR(36) reduce el espacio a menos de la mitad, y PostgreSQL tiene un tipo uuid nativo. Empieza preguntándote si necesitas un UUID siquiera: si no requieres generación distribuida ni sin conexión, una secuencia basta. |
| Tratar un UUID como si fuera un secreto | La parte aleatoria de un UUID versión 4 son 122 bits, así que adivinarlo no es realista, y sólo por eso aparecen diseños que meten un UUID en una URL dando por hecho que sólo quien lo conozca podrá llegar al recurso. Pero un UUID es un identificador, no un valor pensado para mantenerse en secreto: ponlo en una URL y quedará en el historial del navegador, en las cabeceras de referente, en los registros de acceso, en los de los proxies y en los enlaces compartidos. Peor: la versión 1 incorpora la dirección MAC y la hora de generación, así que ni siquiera es aleatoria; usar v1 como identificador de sesión o token de restablecimiento de contraseña es peligroso. | Evita los diseños en los que conocer la URL es lo que concede el acceso. El control de acceso corresponde a la autenticación y la autorización; la dificultad de adivinar una URL es, como mucho, un complemento. Cuando de verdad necesites que la URL actúe como llave, como en un enlace compartido, usa un token dedicado en lugar de un UUID y dale caducidad y una vía de revocación: 32 bytes aleatorios de crypto.getRandomValues() codificados en Base64url es la construcción estándar. Y mantén esa URL fuera de los registros poniéndola en el fragmento (tras la #) en vez de en la ruta, o enviándola por POST: los fragmentos nunca llegan al servidor. Un UUID dice qué es algo; no demuestra quién eres tú. |
| Diferencias de formato hacen que un id parezca dos | Un UUID admite varias grafías: mayúsculas y minúsculas (A1B2 frente a a1b2), con o sin guiones (36 caracteres o 32) y entre llaves ({...}, convención de Microsoft). La RFC 4122 especifica minúsculas al generar y aceptación de ambas al recibir, pero comparados como cadenas todos ellos son valores distintos. En la práctica, que un sistema devuelva mayúsculas mientras otro guarda minúsculas crea registros duplicados de la misma entidad, y como que coincidan o no puede depender de la intercalación de la base de datos, el comportamiento cambia según el entorno y la causa se vuelve difícil de localizar. |
Normaliza a una sola forma en el borde de tu sistema: con guiones y en minúsculas es lo más común y coincide con la recomendación de la RFC. Pasa por toLowerCase() los valores que lleguen por API antes de compararlos o guardarlos. Guardarlos en una columna binaria o de tipo uuid nativo, en lugar de en una cadena, es el arreglo de fondo: en binario la cuestión de la grafía sencillamente no existe, y el tipo uuid de PostgreSQL absorbe las grafías de entrada y las trata como el mismo valor. Y valida allí donde aceptes un UUID: dar error en la frontera ante un valor mal formado es mucho más rastreable que crear en silencio un segundo registro. |
Con las colisiones, preocuparse demasiado y preocuparse demasiado poco son errores por igual. Un UUID de versión 4 lleva 122 bits aleatorios, y generar mil millones por segundo durante un siglo deja aún una probabilidad de colisión despreciable, pero eso vale sólo si la aleatoriedad es criptográficamente segura. Existen implementaciones que construyen UUID sobre Math.random(), y esas sí colisionan en la práctica. Los dispositivos embebidos y los servidores recién arrancados andan especialmente escasos de entropía, y hay casos documentados de varias máquinas produciendo el mismo valor. Usa crypto.randomUUID() en el navegador y la API criptográfica de aleatoriedad de tu lenguaje en el servidor. Una cosa más: crypto.randomUUID() sólo está disponible en un contexto seguro: HTTPS o localhost. Esa es casi siempre la explicación cuando la función misteriosamente no existe en un montaje interno por HTTP.
📖 Cómo usar
-
1
Configura la cantidadIngresa un número entre 1 y 100.
-
2
Elige con/sin guiones y generaMarca sin guiones y haz clic en Generar.
-
3
Usa la copia masivaUsa la copia masiva para copiar todos los UUIDs.
❓ Preguntas frecuentes
¿Qué es UUID v4?
¿Hay riesgo de colisión?
¿Se puede usar UUID como clave primaria?
🐛 ¿Encontró un problema con esta herramienta?
Gratis, sin registro. Incluso solo los pasos para reproducir ayudan. Los informes van directamente al operador y se usan para corregir.
¡Gracias por tu reporte!
Tu reporte llegó al operador y se usará para mejorar.