Generador UUID v3

Genera UUID v3 deterministas basados en nombre usando MD5

Espacio de nombres

6ba7b810-9dad-11d1-80b4-00c04fd430c8

Nombre

UUID v3 generado

Introduce un nombre y haz clic en Generar
El mismo espacio de nombres + nombre siempre produce el mismo UUID
Note:UUID v3 es un formato legado que usa hash MD5. Para desarrollo nuevo que requiera UUIDs deterministas, prefiera UUID v5 (SHA-1). Para IDs únicos de propósito general, use UUID v4.

¿Qué es UUID v3?

UUID v3 es una versión UUID basada en nombre definida en RFC 4122. En lugar de datos aleatorios o una marca de tiempo, deriva el UUID de forma determinista a partir de dos entradas: un UUID de espacio de nombres y una cadena de nombre. El par espacio de nombres + nombre se hashea con MD5, y el hash resultante se formatea como UUID.

La propiedad clave de UUID v3 es el determinismo: el mismo espacio de nombres y nombre siempre producirán el UUID idéntico, en cualquier máquina, en cualquier momento. Esto lo hace adecuado para el direccionamiento de contenido — generando identificadores estables para recursos que se identifican por un nombre significativo.

UUID v3 usa MD5 como función hash. MD5 se considera criptográficamente roto para propósitos de seguridad, por lo que UUID v5 (que usa SHA-1) generalmente se prefiere para desarrollo nuevo. Ni v3 ni v5 proporcionan aleatoriedad — son puramente deterministas.

Espacios de Nombres Estándar

RFC 4122 define cuatro UUIDs de espacio de nombres preasignados. Usar un espacio de nombres estándar garantiza la interoperabilidad — dos implementaciones independientes producirán el mismo UUID v3 para el mismo nombre dentro del mismo espacio de nombres:

Espacio de NombresUUIDUsar para
DNS6ba7b810-9dad-11d1-80b4-00c04fd430c8Nombres de dominio completamente calificados (p. ej. 'example.com')
URL6ba7b811-9dad-11d1-80b4-00c04fd430c8URLs y URIs (p. ej. 'https://example.com/resource')
OID6ba7b812-9dad-11d1-80b4-00c04fd430c8Identificadores de Objeto ISO (p. ej. '1.2.840.113556')
X.5006ba7b814-9dad-11d1-80b4-00c04fd430c8Nombres Distinguidos X.500 (p. ej. 'cn=John,dc=example,dc=com')

También puede usar cualquier UUID arbitrario como espacio de nombres personalizado — por ejemplo, un UUID v4 que genere una vez e incorpore en su aplicación como constante. Esto le permite crear un espacio de nombres privado para sus propias asignaciones de nombre a UUID.

UUID v3 vs UUID v5

UUID v3 y UUID v5 son estructuralmente idénticos — ambos son UUIDs deterministas basados en nombre. La única diferencia es la función hash:

UUID v3
  • Usa hash MD5
  • Salida de 128 bits (tamaño UUID)
  • Definido en RFC 4122
  • MD5 está criptográficamente roto
  • Soportado por todas las bibliotecas UUID
UUID v5
  • Usa hash SHA-1
  • Hash de 160 bits truncado a 128 bits
  • Definido en RFC 4122
  • SHA-1 está deprecado para uso de seguridad pero es más fuerte que MD5
  • Soportado por todas las bibliotecas UUID

Prefiera UUID v5 sobre UUID v3 para todo desarrollo nuevo. El hash SHA-1 es más fuerte que MD5, y la diferencia de rendimiento es insignificante. Use UUID v3 solo cuando necesite reproducir UUIDs de un sistema que ya lo usa.

Cuándo Usar UUID v3

UUID v3 (y v5) son apropiados cuando necesita un identificador estable y reproducible derivado de un nombre significativo — en lugar de un ID aleatorio que debe almacenarse y buscarse:

Canonicalización de URL
Genere un UUID determinista para cualquier URL para usar como clave compacta de longitud fija en una base de datos o caché — sin almacenar una tabla de mapeo.
Identificadores basados en DNS
Asigne UUIDs estables a nombres de host o nombres de dominio que permanezcan consistentes entre implementaciones y bases de datos.
Direccionamiento de contenido
Cree IDs reproducibles para elementos de contenido identificados por su nombre canónico — artículos, productos o claves de configuración.
Creación de recursos idempotente
Genere el mismo UUID para el mismo nombre de recurso, de modo que los intentos de creación repetidos sean naturalmente idempotentes sin una búsqueda.
Datos de prueba
Produzca UUIDs estables y predecibles en datos de prueba para que las aserciones de prueba no necesiten actualizarse cuando se vuelvan a ejecutar.
Deduplicación entre sistemas
Dos sistemas independientes pueden derivar el mismo UUID para el mismo nombre sin comunicación, habilitando la deduplicación sin un registro de IDs compartido.

Entendiendo el Determinismo

El determinismo de UUID v3 es tanto su mayor fortaleza como su restricción más importante. Dado cualquier UUID de espacio de nombres y cualquier cadena de nombre, el UUID de salida está completamente fijo — no se involucra aleatoriedad. Esto significa:

Ejemplo (espacio de nombres DNS, nombre = 'example.com'):9073926b-929f-31c2-abc9-fad77ae3e8eb

Siempre produce: 9073926b-929f-31c2-abc9-fad77ae3e8eb

Si un atacante conoce el espacio de nombres y puede adivinar el nombre, puede calcular el UUID de antemano. Los valores UUID v3 nunca deben usarse como tokens impredecibles, IDs de sesión o secretos. Use UUID v4 para cualquier identificador sensible a la seguridad.

Ejemplos de Código

UUID v3 requiere un UUID de espacio de nombres y una cadena de nombre. Use el paquete estándar uuid:

JavaScript / Node.js
// Browser / Node.js — UUID v3 without dependencies
function uuidV3(namespace, name) {
  // namespace must be a UUID string like '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
  const nsBytes = namespace.replace(/-/g, '').match(/../g).map(h => parseInt(h, 16))
  const nameBytes = [...new TextEncoder().encode(name)]
  const combined = new Uint8Array([...nsBytes, ...nameBytes])

  // md5(combined) — use your preferred MD5 library or the inline implementation
  const hash = md5(combined) // returns Uint8Array(16)
  hash[6] = (hash[6] & 0x0f) | 0x30 // version 3
  hash[8] = (hash[8] & 0x3f) | 0x80 // variant

  const h = [...hash].map(b => b.toString(16).padStart(2, '0')).join('')
  return `${h.slice(0,8)}-${h.slice(8,12)}-${h.slice(12,16)}-${h.slice(16,20)}-${h.slice(20)}`
}

// Using the 'uuid' npm package
import { v3 as uuidv3 } from 'uuid'
const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
console.log(uuidv3('example.com', uuidv3.DNS))
// → '9073926b-929f-31c2-abc9-fad77ae3e8eb' (always the same)
Python
import uuid

# Using the standard library
dns_uuid = uuid.uuid3(uuid.NAMESPACE_DNS, 'example.com')
print(dns_uuid)
# → 9073926b-929f-31c2-abc9-fad77ae3e8eb

url_uuid = uuid.uuid3(uuid.NAMESPACE_URL, 'https://example.com/page')
print(url_uuid)

# Custom namespace
MY_NS = uuid.UUID('a1b2c3d4-e5f6-7890-abcd-ef1234567890')
custom = uuid.uuid3(MY_NS, 'my-entity-name')
print(custom)
Go
package main

import (
    "fmt"
    "github.com/google/uuid"
)

func main() {
    // Standard DNS namespace
    ns := uuid.MustParse("6ba7b810-9dad-11d1-80b4-00c04fd430c8")
    id := uuid.NewMD5(ns, []byte("example.com"))
    fmt.Println(id)
    // → 9073926b-929f-31c2-abc9-fad77ae3e8eb

    // URL namespace
    urlNS := uuid.MustParse("6ba7b811-9dad-11d1-80b4-00c04fd430c8")
    idURL := uuid.NewMD5(urlNS, []byte("https://example.com/page"))
    fmt.Println(idURL)
}

Preguntas Frecuentes

¿Son intercambiables UUID v3 y UUID v5?
No — producen diferentes salidas para las mismas entradas porque usan diferentes funciones hash (MD5 vs SHA-1). Un UUID v3 y un UUID v5 generados del mismo espacio de nombres + nombre serán UUIDs diferentes. No son intercambiables, pero son funcionalmente equivalentes en estructura y casos de uso.
¿Es UUID v3 resistente a colisiones?
Dentro de un espacio de nombres dado, dos nombres diferentes producirán diferentes valores UUID v3 siempre que MD5 no produzca una colisión para esas entradas específicas. Los ataques de colisión MD5 existen, pero requieren entradas cuidadosamente elaboradas — en la práctica, los nombres que ocurren naturalmente (URLs, nombres de dominio, IDs de producto) no colisionarán. Para mayor garantía, use UUID v5.
¿Puedo usar UUID v3 como clave primaria en una base de datos?
Sí, si comprende las compensaciones. UUID v3 es determinista, por lo que se generará la misma clave para el mismo nombre — esto proporciona idempotencia natural. Sin embargo, UUID v3 no es ordenable por orden de generación, y la fragmentación de índice se aplica igual que con UUID v4. Para claves primarias ordenables y ordenadas por tiempo, use UUID v7.
¿Qué codificación debo usar para la entrada del nombre?
RFC 4122 especifica que el nombre debe convertirse a bytes usando la forma canónica del espacio de nombres. Para el espacio de nombres DNS, use el nombre de dominio como cadena UTF-8 sin punto final. Para el espacio de nombres URL, use la URL completa como cadena UTF-8. Siempre use la misma codificación de forma consistente — diferentes codificaciones del mismo nombre lógico producirán diferentes UUIDs.
¿Oculta UUID v3 el nombre original?
MD5 es una función unidireccional — no puede revertir un UUID v3 para recuperar el nombre original. Sin embargo, si un atacante conoce el espacio de nombres y sospecha un pequeño conjunto de posibles nombres, puede calcular previamente los valores UUID v3 para cada candidato y comparar. Para nombres de un espacio pequeño o predecible, UUID v3 no proporciona confidencialidad. Use UUID v4 si necesita un identificador opaco e imposible de adivinar.