Qué es un UUID v5 y por qué es determinístico
Un UUID v5 es un identificador de 128 bits definido en la RFC 4122 que, a diferencia del v4 aleatorio, se calcula a partir de dos datos: un namespace (que es a su vez un UUID) y un nombre (cualquier texto). El algoritmo aplica SHA-1 sobre la concatenación de ambos, así que el mismo namespace con el mismo nombre produce siempre el mismo UUID, en cualquier lenguaje, en cualquier máquina, hoy y dentro de diez años. Esa reproducibilidad es oro para varios problemas reales: deduplicación (dos sistemas que ven el mismo registro generan el mismo ID sin coordinarse), claves de cache estables, migraciones de datos donde necesitás regenerar IDs sin romper referencias, e IDs reproducibles en tests y pipelines. El namespace evita colisiones entre dominios distintos: "juan" como usuario y "juan" como producto generan UUIDs diferentes si usás namespaces diferentes.
Cómo se calcula (el algoritmo paso a paso)
El algoritmo de la RFC 4122 es simple: se toman los 16 bytes del UUID del namespace, se les concatenan los bytes UTF-8 del nombre, y se calcula el SHA-1 de todo eso. De los 20 bytes del hash se usan los primeros 16; luego se fuerza el nibble de versión a 5 en el byte 6 y los bits de variante (10) en el byte 8, y se formatea como 8-4-4-4-12. Por ejemplo, con el namespace DNS y el nombre www.example.com el resultado es siempre 2ed6657d-e927-568b-95e1-2665a8aea6a2 — es el ejemplo oficial de la RFC 9562 (la revisión de la RFC 4122) y podés verificarlo acá arriba o en Python con uuid.uuid5(uuid.NAMESPACE_DNS, 'www.example.com'). Esta herramienta calcula el SHA-1 con crypto.subtle, la API criptográfica nativa del navegador, así que nada sale de tu dispositivo.
v5 no es para todo: cuándo te conviene otra versión
Si lo que necesitás es un ID único nuevo sin ningún input (el caso más común en bases de datos y APIs), lo tuyo es un v4 aleatorio o un v7 ordenable por tiempo: para eso tenés nuestro generador de UUID, que genera v4 y v7 individuales o en lote. Usá v5 solamente cuando la propiedad que buscás es que el mismo dato produzca siempre el mismo ID.
Comparativa de versiones UUID
| Versión | Fuente de datos | Determinístico | Hash | Cuándo usarla |
|---|---|---|---|---|
| v1 | Timestamp + dirección MAC | No | — | Sistemas legacy; filtra la MAC del equipo (problema de privacidad) |
| v3 | Namespace + nombre | Sí | MD5 | Solo por compatibilidad con sistemas viejos; preferí v5 |
| v4 | Aleatorio (CSPRNG) | No | — | El caso general: IDs únicos sin coordinación entre sistemas |
| v5 | Namespace + nombre | Sí | SHA-1 | IDs reproducibles: deduplicación, cache, migraciones |
| v7 | Timestamp + aleatorio | No | — | Claves de base de datos ordenables por tiempo (índices felices) |
Los 4 namespaces estándar de la RFC 4122
| Namespace | UUID | Para qué tipo de nombre |
|---|---|---|
| DNS | 6ba7b810-9dad-11d1-80b4-00c04fd430c8 | Nombres de dominio (ej. www.example.com) |
| URL | 6ba7b811-9dad-11d1-80b4-00c04fd430c8 | URLs completas (ej. https://example.com/a) |
| OID | 6ba7b812-9dad-11d1-80b4-00c04fd430c8 | Identificadores de objeto ISO (ej. 1.3.6.1.4.1) |
| X.500 | 6ba7b814-9dad-11d1-80b4-00c04fd430c8 | Nombres distinguidos de directorio (DN de LDAP/X.500) |
Si tus nombres no encajan en ninguna categoría estándar, generá un UUID v4 una sola vez, fijalo como constante en tu proyecto y usalo como namespace propio con la opción "Personalizado".