único que mexico identificador uuid

que - uuid npm



¿Qué versión de UUID usar? (4)

Esa es una pregunta muy general. Una respuesta es: "depende del tipo de UUID que desee generar". Pero una mejor es la siguiente: "Antes de responder, ¿puede decirnos por qué necesita programar su propio algoritmo de generación UUID en lugar de llamar a la funcionalidad de generación UUID que ofrecen los sistemas operativos más modernos?"

Hacerlo es más fácil y seguro, y como probablemente no necesite generar el suyo, ¿por qué molestarse en codificar una implementación? En ese caso, la respuesta se convierte en uso, independientemente de lo que proporcione su O / S, lenguaje de programación o marco. Por ejemplo, en Windows, hay CoCreateGuid o UuidCreate o uno de los varios envoltorios disponibles de los numerosos marcos en uso. En Linux hay uuid_generate .

Si, por alguna razón, absolutamente necesitas generar los tuyos, al menos tienes la sensatez de evitar generar UUID v1 y v2. Es difícil conseguir eso bien. Pegue, en cambio, a los UUID v3, v4 o v5.

Actualización : en un comentario, mencionas que estás usando Python y enlaza con docs.python.org/2/library/uuid.html . Mirando a través de la interfaz provista, la opción más fácil para usted sería generar un UUID v4 (es decir, uno creado a partir de datos aleatorios) llamando a uuid.uuid4() .

Si tiene algunos datos que necesita (o puede) hash para generar un UUID, entonces puede usar v3 (que depende de MD5) o v5 (que depende de SHA1). Generar un UUID v3 o v5 es simple: primero elija el tipo de UUID que desea generar (probablemente debería elegir v5) y luego elija el espacio de nombres apropiado y llame a la función con los datos que desea usar para generar el UUID. Por ejemplo, si tiene un hash de una URL, usaría NAMESPACE_URL :

uuid.uuid3(uuid.NAMESPACE_URL, ''https://ripple.com'')

Tenga en cuenta que este UUID será diferente del UUID v5 para la misma URL, que se genera así:

uuid.uuid5(uuid.NAMESPACE_URL, ''https://ripple.com'')

Una buena propiedad de las URL v3 y v5 es que deben ser interoperables entre implementaciones. En otras palabras, si dos sistemas diferentes utilizan una implementación que cumple con RFC4122, ambos (o al menos deberían ) generarán el mismo UUID si todas las demás cosas son iguales (es decir, generan el mismo UUID de la versión, con el mismo espacio de nombres y el mismo mismos datos). Esta propiedad puede ser muy útil en algunas situaciones (especialmente en escenarios de almacenamiento de contenido direccionable), pero quizás no en su caso particular.

¿Qué versión del UUID deberías usar? Vi muchos subprocesos que explican lo que implica cada versión, pero tengo problemas para descubrir qué es lo mejor para qué aplicaciones.


Hay dos formas diferentes de generar un UUID.

Si solo necesita una ID única, desea una versión 1 o una versión 4.

  • Versión 1: Esto genera una ID única basada en una dirección MAC de la tarjeta de red y un temporizador. Estos ID son fáciles de predecir (dado uno, podría adivinar otro) y se pueden rastrear hasta su tarjeta de red. No se recomienda crear estos.

  • Versión 4: se generan a partir de números aleatorios (o pseudoaleatorios). Si solo necesitas generar un UUID, esto es probablemente lo que quieres.

Si necesita generar siempre el mismo UUID a partir de un nombre dado, desea una versión 3 o 5.

  • Versión 3: Esto genera una ID única a partir de un hash MD5 de un espacio de nombres y un nombre. Si necesita compatibilidad con versiones anteriores (con otro sistema que genere UUID a partir de nombres), use esto.

  • Versión 5: Esto genera una ID única a partir de un hash SHA-1 de un espacio de nombres y un nombre. Esta es la versión preferida.


Si desea un número aleatorio, utilice una biblioteca de números aleatorios. Si desea un identificador único con efectivamente 0.00 ... muchos más 0s aquí ... 001% de probabilidad de colisión, debe usar UUIDv1. Ver la publicación de Nick para UUIDv3 y v5.

UUIDv1 NO es seguro. No está destinado a ser. Está destinado a ser ÚNICO, no incuestionable. UUIDv1 usa la marca de tiempo actual, más un identificador de máquina, más algunas cosas aleatorias para hacer un número que nunca será generado por ese algoritmo nuevamente. Esto es apropiado para una ID de transacción (incluso si todos están haciendo millones de transacciones).

Para ser honesto, no entiendo por qué existe UUIDv4 ... al leer RFC4122 , parece que esa versión NO elimina la posibilidad de colisiones. Es solo un generador de números aleatorios. Si eso es cierto, entonces tiene muchas posibilidades de que dos máquinas en el mundo creen finalmente el mismo "UUID" v4 (cita porque no hay un mecanismo para garantizar la singularidad de la U.niversal). En esa situación, no creo que ese algoritmo pertenezca a un RFC que describa métodos para generar valores únicos. Pertenecería a un RFC sobre la generación de aleatoriedad. Para un conjunto de números aleatorios:

chance_of_collision = 1 - (set_size! / (set_size - tries)!) / (set_size ^ tries)


La documentación de Postgres describe las diferencias entre los UUID . Un par de ellos:

V3:

uuid_generate_v3(namespace uuid, name text) : esta función genera un UUID de la versión 3 en el espacio de nombres dado usando el nombre de entrada especificado.

V4:

uuid_generate_v4 : esta función genera un UUID de la versión 4, que se deriva completamente de números aleatorios.