Para la creación de UUID RFC9562 (formalmente RFC4122)
uuid
Nota
w> uuid@11
ya está disponible: consulte el REGISTRO DE CAMBIOS para obtener más detalles. TL;DR:
@types/uuid
de sus dependencias)options
arg para v1()
, v6()
y v7()
. Ver detallesUint8Array
. (Puede afectar a las personas que llaman de parse()
, stringify()
o que pasan un argumento option#buf
a v1()
- v7()
). 1. Instalar
npm install uuid
2. Crea un UUID
Sintaxis ESM (debe utilizar exportaciones con nombre):
import { v4 as uuidv4 } from 'uuid' ;
uuidv4 ( ) ; // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
... ComúnJS:
const { v4 : uuidv4 } = require ( 'uuid' ) ;
uuidv4 ( ) ; // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
Para UUID de marca de tiempo, UUID de espacio de nombres y otras opciones, siga leyendo...
uuid.NIL | La cadena UUID nula (todos ceros) | Nuevo en [email protected] |
uuid.MAX | La cadena UUID máxima (todos unos) | Nuevo en [email protected] |
uuid.parse() | Convertir una cadena UUID en una matriz de bytes | Nuevo en [email protected] |
uuid.stringify() | Convertir una matriz de bytes a una cadena UUID | Nuevo en [email protected] |
uuid.v1() | Cree un UUID de la versión 1 (marca de tiempo) | |
uuid.v1ToV6() | Cree un UUID de la versión 6 a partir de un UUID de la versión 1 | Nuevo en uuid@10 |
uuid.v3() | Cree un UUID versión 3 (espacio de nombres con MD5) | |
uuid.v4() | Cree un UUID versión 4 (aleatorio) | |
uuid.v5() | Cree un UUID versión 5 (espacio de nombres con SHA-1) | |
uuid.v6() | Cree un UUID de la versión 6 (marca de tiempo, reordenado) | Nuevo en uuid@10 |
uuid.v6ToV1() | Cree un UUID de la versión 1 a partir de un UUID de la versión 6 | Nuevo en uuid@10 |
uuid.v7() | Cree un UUID de la versión 7 (Unix Epoch basado en el tiempo) | Nuevo en uuid@10 |
uuid.v8() | "Dejado en blanco intencionalmente" | |
uuid.validate() | Pruebe una cadena para ver si es un UUID válido | Nuevo en [email protected] |
uuid.version() | Detectar la versión RFC de un UUID | Nuevo en [email protected] |
La cadena UUID nula (todos ceros).
Ejemplo:
import { NIL as NIL_UUID } from 'uuid' ;
NIL_UUID ; // ⇨ '00000000-0000-0000-0000-000000000000'
La cadena UUID máxima (todos unos).
Ejemplo:
import { MAX as MAX_UUID } from 'uuid' ;
MAX_UUID ; // ⇨ 'ffffffff-ffff-ffff-ffff-ffffffffffff'
Convertir una cadena UUID en una matriz de bytes
str | Una String UUID válida |
regresa | Uint8Array[16] |
lanza | TypeError si str no es un UUID válido |
Nota
El orden de los valores en las matrices de bytes utilizadas por parse()
y stringify()
sigue el orden izquierda ↠ derecha de pares hexadecimales en cadenas UUID. Como se muestra en el siguiente ejemplo.
Ejemplo:
import { parse as uuidParse } from 'uuid' ;
// Parse a UUID
uuidParse ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨
// Uint8Array(16) [
// 110, 192, 189, 127, 17,
// 192, 67, 218, 151, 94,
// 42, 138, 217, 235, 174,
// 11
// ]
Convertir una matriz de bytes a una cadena UUID
arr | Colección similar Array de 16 valores (comenzando desde offset ) entre 0 y 255. |
[ offset = 0] | Number índice inicial en la matriz |
regresa | String |
lanza | TypeError si no se puede generar una cadena UUID válida |
Nota
El orden de los valores en las matrices de bytes utilizadas por parse()
y stringify()
sigue el orden izquierda ↠ derecha de pares hexadecimales en cadenas UUID. Como se muestra en el siguiente ejemplo.
Ejemplo:
import { stringify as uuidStringify } from 'uuid' ;
const uuidBytes = Uint8Array . of (
0x6e ,
0xc0 ,
0xbd ,
0x7f ,
0x11 ,
0xc0 ,
0x43 ,
0xda ,
0x97 ,
0x5e ,
0x2a ,
0x8a ,
0xd9 ,
0xeb ,
0xae ,
0x0b
) ;
uuidStringify ( uuidBytes ) ; // ⇨ '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'
Crear un UUID RFC versión 1 (marca de tiempo)
[ options ] | Object con una o más de las siguientes propiedades: |
[ options.node = (random) ] | Campo "nodo" RFC como una Array[6] de valores de bytes (según 4.1.6) |
[ options.clockseq = (random) ] | "Secuencia de reloj" RFC como un Number entre 0 y 0x3fff |
[ options.msecs = (current time) ] | Campo "marca de tiempo" RFC ( Number de milisegundos, época Unix) |
[ options.nsecs = 0 ] | Campo "marca de tiempo" RFC ( Number de nanosegundos a agregar a msecs debe ser de 0 a 10 000) |
[ options.random = (random) ] | Array de 16 bytes aleatorios (0-255) utilizados para generar otros campos, arriba |
[ options.rng ] | Alternativa a options.random , una Function que devuelve un Array de 16 bytes aleatorios (0-255) |
[ buffer ] | Array | Buffer Si se especifica, uuid se escribirá aquí en forma de bytes, comenzando en offset |
[ offset = 0] | Índice Number para comenzar a escribir bytes UUID en buffer |
regresa | String UUID si no se especifica ningún buffer ; de lo contrario, devuelve buffer |
lanza | Error si se solicitan más de 10 millones de UUID/seg. |
Nota
La identificación del nodo predeterminada (los últimos 12 dígitos del UUID) se genera una vez, de forma aleatoria, al iniciar el proceso y luego permanece sin cambios durante la duración del proceso.
Nota
options.random
y options.rng
solo son significativos en la primera llamada a v1()
, donde se pueden pasar para inicializar el node
interno y los campos clockseq
.
Ejemplo:
import { v1 as uuidv1 } from 'uuid' ;
uuidv1 ( ) ; // ⇨ '2c5ea4c0-4067-11e9-9bdd-2b0d7b3dcb6d'
Ejemplo de uso options
:
import { v1 as uuidv1 } from 'uuid' ;
const options = {
node : Uint8Array . of ( 0x01 , 0x23 , 0x45 , 0x67 , 0x89 , 0xab ) ,
clockseq : 0x1234 ,
msecs : new Date ( '2011-11-01' ) . getTime ( ) ,
nsecs : 5678 ,
} ;
uuidv1 ( options ) ; // ⇨ '710b962e-041c-11e1-9234-0123456789ab'
Convertir un UUID de la versión 1 a la versión 6
import { v1ToV6 } from 'uuid' ;
v1ToV6 ( '92f62d9e-22c4-11ef-97e9-325096b39f47' ) ; // ⇨ '1ef22c49-2f62-6d9e-97e9-325096b39f47'
Cree un UUID RFC versión 3 (espacio de nombres con MD5)
La API es idéntica a v5()
, pero utiliza "v3" en su lugar.
Importante
Según RFC, " si la compatibilidad con versiones anteriores no es un problema, se prefiere SHA-1 [Versión 5] ".
Cree un UUID RFC versión 4 (aleatorio)
[ options ] | Object con una o más de las siguientes propiedades: |
[ options.random ] | Array de 16 bytes aleatorios (0-255) |
[ options.rng ] | Alternativa a options.random , una Function que devuelve un Array de 16 bytes aleatorios (0-255) |
[ buffer ] | Array | Buffer Si se especifica, uuid se escribirá aquí en forma de bytes, comenzando en offset |
[ offset = 0] | Índice Number para comenzar a escribir bytes UUID en buffer |
regresa | String UUID si no se especifica ningún buffer ; de lo contrario, devuelve buffer |
Ejemplo:
import { v4 as uuidv4 } from 'uuid' ;
uuidv4 ( ) ; // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
Ejemplo que utiliza valores random
predefinidos:
import { v4 as uuidv4 } from 'uuid' ;
const v4options = {
random : Uint8Array . of (
0x10 ,
0x91 ,
0x56 ,
0xbe ,
0xc4 ,
0xfb ,
0xc1 ,
0xea ,
0x71 ,
0xb4 ,
0xef ,
0xe1 ,
0x67 ,
0x1c ,
0x58 ,
0x36
) ,
} ;
uuidv4 ( v4options ) ; // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
Cree un UUID RFC versión 5 (espacio de nombres con SHA-1)
name | String | Array |
namespace | String | Array[16] UUID del espacio de nombres |
[ buffer ] | Array | Buffer Si se especifica, uuid se escribirá aquí en forma de bytes, comenzando en offset |
[ offset = 0] | Índice Number para comenzar a escribir bytes UUID en buffer |
regresa | String UUID si no se especifica ningún buffer ; de lo contrario, devuelve buffer |
Nota
Los espacios de nombres RFC DNS
y URL
están disponibles como v5.DNS
y v5.URL
.
Ejemplo con espacio de nombres personalizado:
import { v5 as uuidv5 } from 'uuid' ;
// Define a custom namespace. Readers, create your own using something like
// https://www.uuidgenerator.net/
const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341' ;
uuidv5 ( 'Hello, World!' , MY_NAMESPACE ) ; // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'
Ejemplo con espacio de nombres URL
RFC:
import { v5 as uuidv5 } from 'uuid' ;
uuidv5 ( 'https://www.w3.org/' , uuidv5 . URL ) ; // ⇨ 'c106a26a-21bb-5538-8bf2-57095d1976c1'
Cree un UUID RFC versión 6 (marca de tiempo, reordenado)
Este método toma los mismos argumentos que uuid.v1().
import { v6 as uuidv6 } from 'uuid' ;
uuidv6 ( ) ; // ⇨ '1e940672-c5ea-64c0-9b5d-ab8dfbbd4bed'
Ejemplo de uso options
:
import { v6 as uuidv6 } from 'uuid' ;
const options = {
node : [ 0x01 , 0x23 , 0x45 , 0x67 , 0x89 , 0xab ] ,
clockseq : 0x1234 ,
msecs : new Date ( '2011-11-01' ) . getTime ( ) ,
nsecs : 5678 ,
} ;
uuidv6 ( options ) ; // ⇨ '1e1041c7-10b9-662e-9234-0123456789ab'
Convertir un UUID de la versión 6 a la versión 1
import { v6ToV1 } from 'uuid' ;
v6ToV1 ( '1ef22c49-2f62-6d9e-97e9-325096b39f47' ) ; // ⇨ '92f62d9e-22c4-11ef-97e9-325096b39f47'
Cree un UUID RFC versión 7 (aleatorio)
[ options ] | Object con una o más de las siguientes propiedades: |
[ options.msecs = (current time) ] | Campo "marca de tiempo" RFC ( Number de milisegundos, época Unix) |
[ options.random = (random) ] | Array de 16 bytes aleatorios (0-255) utilizados para generar otros campos, arriba |
[ options.rng ] | Alternativa a options.random , una Function que devuelve un Array de 16 bytes aleatorios (0-255) |
[ options.seq = (random) ] | Secuencia de 32 bits Number entre 0 - 0xffffffff. Esto se puede proporcionar para ayudar a garantizar la unicidad de los UUID generados dentro del mismo intervalo de tiempo de milisegundos. Predeterminado = valor aleatorio. |
[ buffer ] | Array | Buffer Si se especifica, uuid se escribirá aquí en forma de bytes, comenzando en offset |
[ offset = 0] | Índice Number para comenzar a escribir bytes UUID en buffer |
regresa | String UUID si no se especifica ningún buffer ; de lo contrario, devuelve buffer |
Ejemplo:
import { v7 as uuidv7 } from 'uuid' ;
uuidv7 ( ) ; // ⇨ '01695553-c90c-705a-b56d-778dfbbd4bed'
"Dejado en blanco intencionalmente"
Nota
Los UUID de la versión 8 (experimentales) son "para casos de uso experimentales o específicos del proveedor". El RFC no define un algoritmo de creación para ellos, por lo que este paquete no ofrece un método v8()
. Sin embargo, los métodos validate()
y version()
sí funcionan con dichos UUID.
Pruebe una cadena para ver si es un UUID válido
str | String para validar |
regresa | true si la cadena es un UUID válido, false en caso contrario |
Ejemplo:
import { validate as uuidValidate } from 'uuid' ;
uuidValidate ( 'not a UUID' ) ; // ⇨ false
uuidValidate ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨ true
Al utilizar validate
y version
juntos, es posible realizar una validación por versión, por ejemplo, validar solo para UUId v4.
import { version as uuidVersion } from 'uuid' ;
import { validate as uuidValidate } from 'uuid' ;
function uuidValidateV4 ( uuid ) {
return uuidValidate ( uuid ) && uuidVersion ( uuid ) === 4 ;
}
const v1Uuid = 'd9428888-122b-11e1-b85c-61cd3cbb3210' ;
const v4Uuid = '109156be-c4fb-41ea-b1b4-efe1671c5836' ;
uuidValidateV4 ( v4Uuid ) ; // ⇨ true
uuidValidateV4 ( v1Uuid ) ; // ⇨ false
Detectar la versión RFC de un UUID
str | Una String UUID válida |
regresa | Number La versión RFC del UUID |
lanza | TypeError si str no es un UUID válido |
Ejemplo:
import { version as uuidVersion } from 'uuid' ;
uuidVersion ( '45637ec4-c85f-11ea-87d0-0242ac130003' ) ; // ⇨ 1
uuidVersion ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨ 4
Nota
Este método devuelve 0
para el UUID NIL
y 15
para el UUID MAX
.
Los UUID se pueden generar desde la línea de comando usando uuid
.
$ npx uuid
ddeb27fb-d9a0-4624-be4d-4615062daed4
El valor predeterminado es generar UUIDS versión 4, sin embargo, se admiten las otras versiones. Escriba uuid --help
para obtener más detalles:
$ npx uuid --help
Usage:
uuid
uuid v1
uuid v3 < name > < namespace uuid >
uuid v4
uuid v5 < name > < namespace uuid >
uuid v7
uuid --help
Note: < namespace uuid > may be " URL " or " DNS " to use the corresponding UUIDs
defined by RFC9562
options
Manejo de UUID de marca de tiempo Antes de uuid@11
, era posible que el estado options
interfiriera con el estado interno utilizado para asegurar la unicidad de los UUID basados en marcas de tiempo (los métodos v1()
, v6()
y v7()
). A partir de uuid@11
, este problema se solucionó utilizando la presencia del argumento options
como indicador para seleccionar entre dos comportamientos posibles:
options
: el estado interno se utiliza para mejorar la unicidad del UUID.options
: NO se utiliza el estado interno y, en su lugar, se aplican los valores predeterminados apropiados según sea necesario. Navegadores : las compilaciones uuid
se prueban con la última versión de escritorio Chrome, Safari, Firefox y Edge. Se espera que funcionen las versiones móviles de estos mismos navegadores, pero actualmente no están probadas.
Nodo : las compilaciones uuid
se prueban con el nodo (versiones LTS), más uno anterior. Por ejemplo, node@18
está en modo de mantenimiento y node@22
es la versión LTS actual. Entonces uuid
admite node@16
- node@22
.
Typecript : se admiten las versiones TS lanzadas en los últimos dos años. fuente
react-native-get-random-values
uuid
. Dado que uuid
también puede aparecer como una dependencia transitiva de algunas otras importaciones, es más seguro simplemente importar react-native-get-random-values
como lo primero en su punto de entrada: import 'react-native-get-random-values' ;
import { v4 as uuidv4 } from 'uuid' ;
Markdown generado a partir de README_js.md por