Comprender los UUID en las aplicaciones JavaScript
Un UUID es un identificador de 128 bits que normalmente se representa como una cadena con el siguiente formato:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Ejemplo:
c32d8b45-92fe-44f6-8b61-42c2107dfe87
Cada segmento contiene caracteres hexadecimales. La versión del UUID determina cómo se genera el valor.
Las versiones comunes incluyen:
- v1 — basado en marca de tiempo y dirección MAC
- v3 — generado usando un espacio de nombres y hash MD5
- v4 — generado aleatoriamente
- v5 — espacio de nombres con hash SHA-1
- v7 — identificadores ordenados por tiempo
En la mayoría de los proyectos web, los desarrolladores prefieren v4 porque es aleatorio y simple de generar.
Métodos para crear identificadores únicos en JavaScript
Existen varias formas prácticas de generar identificadores según tu entorno y tus requisitos.
Comparación de los enfoques disponibles
Método |
Entorno |
Seguridad |
Dependencia |
Web Crypto API |
Navegador |
Alta |
Ninguna |
paquete npm uuid |
Node.js / Navegador |
Alta |
Sí |
generador personalizado |
Cualquiera |
Media |
Ninguna |
paquete uuidv7 |
Node.js |
Alta |
Sí |
Cada enfoque se adapta a diferentes escenarios, que exploramos a continuación.
Crear un identificador con la Web Crypto API
Los navegadores modernos incluyen una API segura que puede generar identificadores sin bibliotecas externas. Este método funciona en contextos HTTPS.
Ejemplo: UUID aleatorio de JavaScript
const id=crypto.randomUUID();
console.log(id);
Ejemplo de salida:
018b2f0a-45a7-778b-88b7-da6933b704a3
Esta función produce un identificador de versión 4 utilizando aleatoriedad criptográficamente segura. Según la documentación, está disponible a través del objeto global crypto del navegador y también funciona en web workers.
Cuándo usar este enfoque
Úsalo cuando:
- ejecutas código en un navegador moderno
- tu sitio usa HTTPS
- quieres cero dependencias
Ejemplo de uso de UUID en el navegador con JavaScript
function createSession() {
return {
sessionId: crypto.randomUUID(),
createdAt: Date.now()
};
}
const session = createSession();
console.log(session);
Este enfoque es ideal para:
- identificadores de sesión
- claves temporales de interfaz de usuario
- modelos de datos del lado del cliente
Uso de un paquete UUID dedicado
Las aplicaciones del lado del servidor y las herramientas de compilación a menudo dependen de bibliotecas externas.
Instalación de una biblioteca UUID de JavaScript
Instala el paquete usando npm:
npm install uuid
El paquete admite varias versiones de UUID y funciona tanto en entornos Node.js como en entornos con bundlers.
Ejemplo de implementación
import { v4 as uuidv4 } from 'uuid';
const id=uuidv4();
console.log(id);
Ejemplo de salida:
7e8c2c70-6c47-4d9f-b49b-7c9e0df6b81d
Las bibliotecas suelen exponer funciones adicionales como:
- conversión de arreglos de bytes
- generación con espacio de nombres
- identificadores deterministas
Ejemplo de UUID en JavaScript con selección de versión
El paquete uuid permite múltiples estrategias de generación.
Ejemplo: generar varias versiones
import { v1 as uuidv1, v4 as uuidv4, v5 as uuidv5 } from 'uuid';
const timeUUID = uuidv1();
const randomUUID = uuidv4();
console.log(timeUUID);
console.log(randomUUID);
Casos de uso típicos:
|
Versión de UUID |
Caso de uso |
|
v1 |
Ordenación de eventos |
|
v4 |
Identificadores aleatorios |
|
v5 |
IDs deterministas |
Los desarrolladores suelen elegir v4 para la mayoría de los sistemas porque no revela información de hardware ni de marcas de tiempo.
Implementación de un generador personalizado ligero
En entornos sin Web Crypto ni paquetes npm, un generador manual puede ser suficiente.
Ejemplo: crear una función UUID en JavaScript
function generateId() {
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);
});
}
console.log(generateId());
Esta implementación imita el formato de la versión 4.
Sin embargo, tiene limitaciones:
- usa Math.random() en lugar de aleatoriedad criptográfica
- no es adecuada para identificadores sensibles a la seguridad
Úsala solo para tareas ligeras como claves temporales de interfaz de usuario.
Identificadores modernos ordenados por tiempo
Algunos sistemas distribuidos requieren identificadores ordenables.
Ejemplo: nuevo enfoque de UUID en JavaScript usando v7
Instala un paquete dedicado:
npm install uuidv7
Luego genera identificadores:
import { uuidv7 } from 'uuidv7';
const id=uuidv7();
console.log(id);
Los identificadores de versión 7 combinan marcas de tiempo con aleatoriedad, lo que los hace útiles para:
- registros de eventos
- bases de datos distribuidas
- sistemas de alto volumen
Casos prácticos de uso para identificadores en JS
Los desarrolladores generan con frecuencia IDs únicos en situaciones como:
Registros de base de datos
const user = {
id: crypto.randomUUID(),
name: "Alice"
};
React component keys
const items = data.map(item => ({
key: crypto.randomUUID(),
value: item
}));
Seguimiento de solicitudes de API
const requestId = crypto.randomUUID();
fetch("/api/data", {
headers: {
"X-Request-ID": requestId
}
});
Estos identificadores ayudan con la depuración, el registro y el rastreo distribuido.
Mejores prácticas para la generación de identificadores
Sigue estas recomendaciones al implementar la generación de identificadores:
- Prefiere aleatoriedad criptográficamente segura
Evita usar Math.random() cuando sea posible. - Usa bibliotecas consolidadas para producción
Las bibliotecas manejan el versionado y los casos límite. - Elige la versión correcta
- v4 → la mayoría de las aplicaciones
- v7 → identificadores ordenables
- v1 → sistemas heredados
- Evita generar identificadores tanto en el cliente como en el servidor para el mismo recurso
Esto puede crear problemas de sincronización.
Conclusión
Los identificadores únicos son fundamentales en los sistemas de software distribuidos. JavaScript ofrece múltiples estrategias para generarlos según el entorno y los requisitos de seguridad.
Los desarrolladores pueden:
- apoyarse en la Web Crypto API para entornos de navegador
- usar un paquete externo para proyectos Node.js
- implementar generadores ligeros para tareas simples
- adoptar identificadores modernos ordenados por tiempo para sistemas a gran escala
Comprender cuándo y cómo generar valores UUID en JS garantiza una identificación fiable de los recursos, reduce el riesgo de colisión y simplifica la arquitectura de la aplicación.