¿Qué es un UUID y por qué es tan útil?
¿Qué es un UUID y por qué es tan útil?
En el mundo del desarrollo de software, la necesidad de identificadores únicos es constante. Ya sea para nombrar archivos, rastrear transacciones o gestionar sesiones de usuario, necesitamos algo que nos asegure que cada elemento es distinto. Aquí es donde entra en juego el Universally Unique Identifier (UUID), también conocido como Globally Unique Identifier (GUID).
Un UUID es esencialmente un número de 128 bits (o 16 bytes) diseñado para ser globalmente único. La probabilidad de que dos UUID generados de forma independiente sean idénticos es tan ínfima que, para propósitos prácticos, se considera cero. Esto lo convierte en una herramienta invaluable para cualquier aplicación que requiera unicidad a gran escala.
Anatomía de un UUID
Todos los UUIDs siguen un formato específico de 36 caracteres, incluyendo guiones, lo que los hace fáciles de reconocer:
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
Donde:
- Las x representan dígitos hexadecimales (0-9, a-f).
- La y es un carácter hexadecimal que indica la variante del UUID (generalmente 8, 9, a o b para la variante RFC 4122).
- El 4 en la tercera sección siempre indica que es un UUID de versión 4, que es el más comúnmente utilizado hoy en día.
Por ejemplo, un UUID podría verse así: d112a206-8a8e-4b6a-87a2-f93eb293d09a.
Este formato se compone de cinco grupos de números hexadecimales:
- Un número entero de 8 dígitos hexadecimales (4 bytes)
- Un número entero de 4 dígitos hexadecimales (2 bytes)
- Un número entero de 4 dígitos hexadecimales (2 bytes)
- Un número entero de 4 dígitos hexadecimales (2 bytes)
- Un número entero de 12 dígitos hexadecimales (6 bytes)
¿Para qué se utilizan los UUIDs?
Los UUIDs son increíblemente versátiles y se usan en una amplia gama de escenarios:
- Llaves primarias en bases de datos (Primary Keys): Permiten generar identificadores únicos para registros sin depender de la autoincrementación, lo que es ideal para sistemas distribuidos.
- Identificación de sesiones de usuario: En aplicaciones web, los UUIDs pueden usarse para identificar de forma única las sesiones de usuario, mejorando la seguridad y el seguimiento.
- Nombres de archivos aleatorios: Al asignar nombres de archivo aleatorios con UUIDs, se evita la posibilidad de colisiones y se añade una capa de seguridad.
- Identificación de transacciones o componentes: En arquitecturas de microservicios o sistemas complejos, los UUIDs son excelentes para rastrear transacciones o identificar componentes específicos.
- Identificadores en APIs: Muchas APIs utilizan UUIDs para identificar recursos, lo que proporciona una forma consistente y escalable de referenciar objetos.
Un vistazo a las versiones de UUID
Aunque el formato de 36 caracteres es consistente, la forma en que se generan los números dentro del UUID varía según su versión. Existen cinco versiones definidas, cada una con un método de generación distinto. La versión 4 es, con mucho, la más utilizada en la actualidad debido a su simplicidad y al uso de números pseudoaleatorios.
Aquí te presento algunas de las versiones principales:
- Versión 1: Generado a partir de la fecha y hora actuales (timestamp) y la dirección MAC de la tarjeta de red del dispositivo que lo genera. Esto asegura unicidad global, pero también puede revelar información sobre el dispositivo.
- Versión 2: Similar a la versión 1, pero incorpora identificadores de dominio (como un UID o GID POSIX). Menos común en la práctica general.
- Versión 3 y 5: Generados mediante el "hashing" (MD5 para la v3 y SHA-1 para la v5) de un espacio de nombres y un nombre. Esto significa que si el espacio de nombres y el nombre de entrada son los mismos, el UUID generado también lo será. Útil para generar UUIDs consistentes a partir de identificadores existentes.
- Versión 4: Generado principalmente a partir de números aleatorios o pseudoaleatorios. Esta es la versión preferida para la mayoría de los casos de uso donde no se necesita codificar información específica o garantizar la consistencia basada en entradas.
Generando UUIDs con JavaScript
Afortunadamente, generar UUIDs en JavaScript es un proceso sencillo, ya que existen librerías robustas y métodos nativos para hacerlo.
Usando la librería uuid (recomendado)
La librería uuid es la opción más popular y confiable para generar UUIDs en JavaScript, soportando varias versiones.
Por CDN (en el navegador)
Si estás trabajando en un entorno de navegador y no utilizas un bundler, puedes importarla directamente:
<script type="module">
import { v4 as uuidv4 } from 'https://jspm.dev/uuid';
console.log(uuidv4()); // => '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
</script>
Por medio de NPM (Node.js o proyectos con bundlers como Webpack/Vite)
Primero, instala la librería en tu proyecto:
import { v4 as uuidv4 } from 'uuid';
console.log(uuidv4()); // => e845c251-c1d6-4917-9e3b-6f190e0cd52e
Generación manual (para entender el concepto)
Aunque no se recomienda para entornos de producción debido a posibles problemas de rendimiento o seguridad en algunos contextos, puedes generar un UUID de forma manual para entender mejor su estructura. Ten en cuenta que esta función solo genera UUIDs que se parecen a la versión 4, pero no cumplen estrictamente con todas las propiedades criptográficas de una implementación robusta.
function uuidv4() {
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
(
c ^
(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
).toString(16)
);
}
console.log(uuidv4()); // => 30839af6-3d7d-4a48-bf68-49ec7dc05003
Nota: Este método utiliza crypto.getRandomValues, que es una API nativa del navegador para generar números criptográficamente seguros.