Una Guía Práctica para Generar UUIDs en JavaScript
¿Necesitas un identificador único para tu aplicación JavaScript? Ya sea que estés construyendo una aplicación con base de datos, gestionando sesiones de usuario o rastreando solicitudes distribuidas, la generación de UUID es una habilidad fundamental que todo desarrollador necesita.
Esta guía cubre los enfoques modernos para la generación de UUID en JavaScript, desde el método integrado crypto.randomUUID() hasta el versátil paquete npm uuid. Aprenderás qué método se ajusta a tu caso de uso específico, ya sea una aplicación web de vanguardia, un servicio Node.js o un sistema heredado que requiere amplia compatibilidad.
Puntos Clave
- Usa
crypto.randomUUID()para entornos modernos (Node.js 14.17+ y navegadores recientes) - Implementa
crypto.getRandomValues()para soporte de navegadores heredados con seguridad criptográfica - Elige el paquete npm uuid cuando necesites versiones específicas de UUID o máxima compatibilidad
- Nunca uses
Math.random()para UUIDs en producción debido a la falta de seguridad criptográfica
¿Qué es un UUID y Por Qué Usarlo?
Un UUID (Identificador Único Universal) es un identificador de 128 bits formateado como 36 caracteres: 550e8400-e29b-41d4-a716-446655440000. También conocidos como GUIDs, estos identificadores están prácticamente garantizados para ser únicos sin requerir una autoridad central o coordinación de base de datos.
Para desarrolladores frontend y Node.js, los UUIDs resuelven problemas críticos:
- Registros de base de datos: Generar claves primarias sin conflictos de auto-incremento
- Tokens de sesión: Crear identificadores de sesión únicos e impredecibles
- Nomenclatura de archivos: Prevenir colisiones de nombres en contenido cargado
- Rastreo de solicitudes: Rastrear operaciones a través de microservicios
Método Moderno: crypto.randomUUID()
El método crypto.randomUUID() es el estándar actual para generar valores de ID únicos en entornos modernos. Está integrado en navegadores y Node.js (14.17+), no requiere dependencias y produce valores UUID v4 criptográficamente seguros.
Implementación en Navegador
const uuid = crypto.randomUUID();
console.log(uuid); // "3b99e3e0-7598-4bf8-b9c1-e915af91713c"
Implementación en Node.js
import { randomUUID } from 'crypto';
const uuid = randomUUID();
console.log(uuid); // "b7e44f0a-811f-4c1c-b7f0-48d51f5dbc1f"
Soporte de Navegadores: Chrome 92+, Firefox 95+, Safari 15.4+, Edge 92+
Soporte de Node.js: Versión 14.17.0+
Usa crypto.randomUUID() cuando necesites UUIDs seguros y aleatorios en aplicaciones modernas sin dependencias externas.
Método Alternativo: crypto.getRandomValues()
Para entornos que no soportan crypto.randomUUID(), puedes implementar la generación de UUID v4 usando crypto.getRandomValues(). Este método funciona en navegadores tan antiguos como Chrome 11 y versiones de Node.js con el módulo crypto.
function generateUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = crypto.getRandomValues(new Uint8Array(1))[0];
const v = c === 'x' ? (r & 0x0f) : ((r & 0x03) | 0x08);
return v.toString(16);
});
}
const uuid = generateUUID();
console.log(uuid); // "42254574-affd-47cc-9915-0ecae592351b"
Este enfoque mantiene la seguridad criptográfica mientras soporta entornos más antiguos.
Discover how at OpenReplay.com.
El Paquete npm uuid para Máxima Flexibilidad
El paquete npm uuid sigue siendo la solución más versátil para la generación de UUID en JavaScript, especialmente cuando necesitas versiones específicas de UUID o máxima compatibilidad.
Instalación
npm install uuid
Uso Básico (UUID v4)
import { v4 as uuidv4 } from 'uuid';
const uuid = uuidv4();
console.log(uuid); // "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"
Otras Versiones de UUID
import { v1, v3, v5 } from 'uuid';
// v1: Basado en marca de tiempo (ordenable)
const uuid1 = v1();
// v3/v5: Basado en nombre (determinístico)
const uuid5 = v5('hello.example.com', v5.DNS);
El paquete uuid soporta todas las versiones de UUID (v1-v5), haciéndolo ideal cuando necesitas:
- UUIDs basados en marca de tiempo para identificadores ordenables (v1)
- UUIDs determinísticos a partir de pares namespace/nombre (v3, v5)
- Retrocompatibilidad con versiones antiguas de Node.js
- React Native u otros entornos no estándar
Cuándo Evitar Math.random()
Aunque puedes encontrar implementaciones de UUID usando Math.random(), estas solo deberían usarse para pruebas o contextos no seguros:
// ⚠️ NO SEGURO - Solo para pruebas
function testUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = Math.random() * 16 | 0;
const v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
Math.random() carece de seguridad criptográfica y no debería usarse para UUIDs en producción.
Mejores Prácticas y Validación
Validación de UUID
Siempre valida los UUIDs provenientes de fuentes externas:
function isValidUUID(uuid) {
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
return uuidRegex.test(uuid);
}
console.log(isValidUUID('550e8400-e29b-41d4-a716-446655440000')); // true
Elegir el Método Correcto
- Aplicación web moderna o Node.js 14.17+: Usa
crypto.randomUUID() - Se necesita soporte de navegadores heredados: Implementa con
crypto.getRandomValues() - Versiones específicas de UUID (v1, v3, v5): Usa el paquete npm uuid
- Máxima compatibilidad: Usa el paquete npm uuid
- Solo pruebas rápidas/prototipos: Implementación con Math.random()
Conclusión
La generación de UUID en JavaScript no tiene que ser compleja. Para la mayoría de las aplicaciones modernas, crypto.randomUUID() proporciona una solución simple y segura. Cuando necesites mayor compatibilidad o versiones específicas de UUID, el paquete npm uuid te tiene cubierto. Solo recuerda evitar Math.random() para uso en producción y validar cualquier UUID proveniente de fuentes externas.
Elige el método que coincida con tu entorno y requisitos: tu yo futuro (y tu equipo) te lo agradecerán por tener identificadores únicos limpios y confiables en todo tu código.
Preguntas Frecuentes
UUID v4 usa números aleatorios o pseudo-aleatorios, haciendo cada ID impredecible. UUID v5 genera IDs determinísticos a partir de un namespace y nombre usando hash SHA-1, por lo que la misma entrada siempre produce el mismo UUID.
No, React Native no soporta crypto.randomUUID() nativamente. Usa el paquete npm uuid en su lugar, que proporciona una implementación compatible que funciona en entornos React Native.
Para IDs más cortos, considera usar los paquetes nanoid o shortid. Generan cadenas únicas seguras para URLs que son más compactas que los UUIDs mientras mantienen suficiente unicidad para la mayoría de las aplicaciones.
Sí, los valores UUID v4 son criptográficamente aleatorios y seguros para exponer. Sin embargo, evita usar UUID v1 en contextos públicos ya que contiene información de marca de tiempo y dirección MAC que podría filtrar detalles del sistema.
Complete picture for complete understanding
Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.
Check our GitHub repo and join the thousands of developers in our community.