Для создания UUID RFC9562 (формально RFC4122)
uuid
Примечание
w> uuid@11
теперь доступен: подробности см. в журнале изменений. ТЛ;ДР:
@types/uuid
из ваших зависимостей).options
arg для v1()
, v6()
и v7()
. Посмотреть подробностиUint8Array
s. (Может повлиять на вызывающие функции parse()
, stringify()
или на те, которые передают аргумент option#buf
в v1()
- v7()
.) 1. Установите
npm install uuid
2. Создайте UUID
Синтаксис ESM (необходимо использовать именованный экспорт):
import { v4 as uuidv4 } from 'uuid' ;
uuidv4 ( ) ; // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
... CommonJS:
const { v4 : uuidv4 } = require ( 'uuid' ) ;
uuidv4 ( ) ; // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
Чтобы узнать об UUID временных меток, UUID пространства имен и других параметрах, читайте дальше...
uuid.NIL | Нулевая строка UUID (все нули) | Новое в [email protected] |
uuid.MAX | Максимальная строка UUID (все) | Новое в [email protected] |
uuid.parse() | Преобразовать строку UUID в массив байтов | Новое в [email protected] |
uuid.stringify() | Преобразовать массив байтов в строку UUID | Новое в [email protected] |
uuid.v1() | Создайте UUID версии 1 (метка времени) | |
uuid.v1ToV6() | Создайте UUID версии 6 из UUID версии 1. | Новое в uuid@10 |
uuid.v3() | Создайте UUID версии 3 (пространство имен с MD5). | |
uuid.v4() | Создайте UUID версии 4 (случайный) | |
uuid.v5() | Создайте UUID версии 5 (пространство имен с SHA-1). | |
uuid.v6() | Создайте UUID версии 6 (метка времени, измененный порядок). | Новое в uuid@10 |
uuid.v6ToV1() | Создайте UUID версии 1 из UUID версии 6. | Новое в uuid@10 |
uuid.v7() | Создайте UUID версии 7 (на основе времени Unix). | Новое в uuid@10 |
uuid.v8() | «Намеренно оставлено пустым» | |
uuid.validate() | Проверьте строку, чтобы убедиться, что она является допустимым UUID. | Новое в [email protected] |
uuid.version() | Определить RFC-версию UUID | Новое в [email protected] |
Нулевая строка UUID (все нули).
Пример:
import { NIL as NIL_UUID } from 'uuid' ;
NIL_UUID ; // ⇨ '00000000-0000-0000-0000-000000000000'
Максимальная строка UUID (все).
Пример:
import { MAX as MAX_UUID } from 'uuid' ;
MAX_UUID ; // ⇨ 'ffffffff-ffff-ffff-ffff-ffffffffffff'
Преобразовать строку UUID в массив байтов
str | Действительная String UUID |
возвращает | Uint8Array[16] |
бросает | TypeError , если str не является допустимым UUID |
Примечание
Порядок значений в массивах байтов, используемых функциями parse()
и stringify()
соответствует порядку шестнадцатеричных пар слева направо в строках UUID. Как показано в примере ниже.
Пример:
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
// ]
Преобразовать массив байтов в строку UUID
arr | Подобная Array коллекция из 16 значений (начиная со offset ) в диапазоне 0–255. |
[ offset = 0] | Number Начальный индекс в массиве |
возвращает | String |
бросает | TypeError , если не может быть сгенерирована действительная строка UUID |
Примечание
Порядок значений в массивах байтов, используемых функциями parse()
и stringify()
соответствует порядку шестнадцатеричных пар слева направо в строках UUID. Как показано в примере ниже.
Пример:
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'
Создайте UUID RFC версии 1 (метка времени).
[ options ] | Object с одним или несколькими из следующих свойств: |
[ options.node = (random) ] | Поле «узел» RFC как Array[6] байтовых значений (согласно 4.1.6) |
[ options.clockseq = (random) ] | «Последовательность часов» RFC как Number от 0 до 0x3fff. |
[ options.msecs = (current time) ] | Поле «метка времени» RFC ( Number миллисекунд, эпоха unix) |
[ options.nsecs = 0 ] | Поле «метка времени» RFC ( Number наносекунд, добавляемых к msecs , должно быть в пределах 0–10 000). |
[ options.random = (random) ] | Array из 16 случайных байтов (0–255), используемый для создания других полей, указанных выше. |
[ options.rng ] | Альтернатива options.random — Function , возвращающая Array из 16 случайных байтов (0–255). |
[ buffer ] | Array | Buffer Если указано, uuid будет записан здесь в байтовой форме, начиная со offset |
[ offset = 0] | Number индекс для начала записи байтов UUID в buffer |
возвращает | String UUID, если buffer не указан, в противном случае возвращает buffer |
бросает | Error , если запрашивается более 10 миллионов UUID/сек. |
Примечание
Идентификатор узла по умолчанию (последние 12 цифр UUID) генерируется один раз случайным образом при запуске процесса, а затем остается неизменным на протяжении всего процесса.
Примечание
options.random
и options.rng
имеют смысл только при самом первом вызове v1()
, где они могут быть переданы для инициализации внутреннего node
и полей clockseq
.
Пример:
import { v1 as uuidv1 } from 'uuid' ;
uuidv1 ( ) ; // ⇨ '2c5ea4c0-4067-11e9-9bdd-2b0d7b3dcb6d'
Пример использования 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'
Преобразование UUID из версии 1 в версию 6
import { v1ToV6 } from 'uuid' ;
v1ToV6 ( '92f62d9e-22c4-11ef-97e9-325096b39f47' ) ; // ⇨ '1ef22c49-2f62-6d9e-97e9-325096b39f47'
Создайте UUID RFC версии 3 (пространство имен с MD5).
API идентичен v5()
, но вместо него используется «v3».
Важный
Согласно RFC: « Если обратная совместимость не является проблемой, предпочтительнее использовать SHA-1 [версия 5] ».
Создайте UUID RFC версии 4 (случайный)
[ options ] | Object с одним или несколькими из следующих свойств: |
[ options.random ] | Array из 16 случайных байтов (0–255) |
[ options.rng ] | Альтернатива options.random — Function , возвращающая Array из 16 случайных байтов (0–255). |
[ buffer ] | Array | Buffer Если указано, uuid будет записан здесь в байтовой форме, начиная со offset |
[ offset = 0] | Number индекс для начала записи байтов UUID в buffer |
возвращает | String UUID, если buffer не указан, в противном случае возвращает buffer |
Пример:
import { v4 as uuidv4 } from 'uuid' ;
uuidv4 ( ) ; // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
Пример использования предопределенных random
значений:
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'
Создайте UUID RFC версии 5 (пространство имен с SHA-1).
name | String | Array |
namespace | String | Array[16] UUID пространства имен |
[ buffer ] | Array | Buffer Если указано, uuid будет записан здесь в байтовой форме, начиная со offset |
[ offset = 0] | Number индекс для начала записи байтов UUID в buffer |
возвращает | String UUID, если buffer не указан, в противном случае возвращает buffer |
Примечание
Пространства имен RFC DNS
и URL
доступны как v5.DNS
и v5.URL
.
Пример с пользовательским пространством имен:
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'
Пример с пространством имен URL
RFC:
import { v5 as uuidv5 } from 'uuid' ;
uuidv5 ( 'https://www.w3.org/' , uuidv5 . URL ) ; // ⇨ 'c106a26a-21bb-5538-8bf2-57095d1976c1'
Создайте UUID RFC версии 6 (метка времени, измененный порядок).
Этот метод принимает те же аргументы, что и uuid.v1().
import { v6 as uuidv6 } from 'uuid' ;
uuidv6 ( ) ; // ⇨ '1e940672-c5ea-64c0-9b5d-ab8dfbbd4bed'
Пример использования 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'
Преобразование UUID из версии 6 в версию 1
import { v6ToV1 } from 'uuid' ;
v6ToV1 ( '1ef22c49-2f62-6d9e-97e9-325096b39f47' ) ; // ⇨ '92f62d9e-22c4-11ef-97e9-325096b39f47'
Создайте UUID RFC версии 7 (случайный)
[ options ] | Object с одним или несколькими из следующих свойств: |
[ options.msecs = (current time) ] | Поле «метка времени» RFC ( Number миллисекунд, эпоха unix) |
[ options.random = (random) ] | Array из 16 случайных байтов (0–255), используемый для создания других полей, указанных выше. |
[ options.rng ] | Альтернатива options.random — Function , возвращающая Array из 16 случайных байтов (0–255). |
[ options.seq = (random) ] | 32-битный порядковый Number от 0 до 0xffffffff. Это может быть сделано для обеспечения уникальности UUID, сгенерированных в течение одного и того же миллисекундного интервала времени. По умолчанию = случайное значение. |
[ buffer ] | Array | Buffer Если указано, uuid будет записан здесь в байтовой форме, начиная со offset |
[ offset = 0] | Number индекс для начала записи байтов UUID в buffer |
возвращает | String UUID, если buffer не указан, в противном случае возвращает buffer |
Пример:
import { v7 as uuidv7 } from 'uuid' ;
uuidv7 ( ) ; // ⇨ '01695553-c90c-705a-b56d-778dfbbd4bed'
«Намеренно оставлено пустым»
Примечание
UUID версии 8 (экспериментальный) предназначены «для экспериментальных или специфичных для поставщика вариантов использования». RFC не определяет для них алгоритм создания, поэтому этот пакет не предлагает метод v8()
. Однако методы validate()
и version()
работают с такими UUID.
Проверьте строку, чтобы убедиться, что она является допустимым UUID.
str | String для проверки |
возвращает | true , если строка является допустимым UUID, в противном случае — false |
Пример:
import { validate as uuidValidate } from 'uuid' ;
uuidValidate ( 'not a UUID' ) ; // ⇨ false
uuidValidate ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨ true
Используя validate
и version
вместе, можно выполнять проверку для каждой версии, например, проверять только 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
Определить RFC-версию UUID
str | Действительная String UUID |
возвращает | Number RFC-версия UUID. |
бросает | TypeError , если str не является допустимым UUID |
Пример:
import { version as uuidVersion } from 'uuid' ;
uuidVersion ( '45637ec4-c85f-11ea-87d0-0242ac130003' ) ; // ⇨ 1
uuidVersion ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨ 4
Примечание
Этот метод возвращает 0
для NIL
UUID и 15
для MAX
UUID.
UUID можно сгенерировать из командной строки с помощью uuid
.
$ npx uuid
ddeb27fb-d9a0-4624-be4d-4615062daed4
По умолчанию создается UUIDS версии 4, однако поддерживаются и другие версии. Введите uuid --help
для получения подробной информации:
$ 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
Обработка UUID временных меток До uuid@11
состояние options
могло мешать внутреннему состоянию, используемому для обеспечения уникальности UUID на основе меток времени (методы v1()
, v6()
и v7()
). Начиная с uuid@11
, эта проблема решена за счет использования аргумента options
в качестве флага для выбора между двумя возможными вариантами поведения:
options
: внутреннее состояние используется для повышения уникальности UUID.options
: Внутреннее состояние НЕ используется, вместо этого при необходимости применяются соответствующие значения по умолчанию. Браузеры : сборки uuid
тестируются на последних версиях настольных Chrome, Safari, Firefox и Edge. Ожидается, что мобильные версии этих же браузеров будут работать, но в настоящее время не тестируются.
Node : сборки uuid
тестируются на узле (выпуски LTS), а также на одном предыдущем. Например, node@18
находится в режиме обслуживания, а node@22
— это текущая версия LTS. Итак, uuid
поддерживает node@16
- node@22
.
Typescript : поддерживаются версии TS, выпущенные за последние два года. источник
react-native-get-random-values
uuid
. Поскольку uuid
также может проявляться как транзитивная зависимость от некоторых других импортов, безопаснее всего просто импортировать react-native-get-random-values
в качестве самого первого элемента в вашей точке входа: import 'react-native-get-random-values' ;
import { v4 as uuidv4 } from 'uuid' ;
Уценка, созданная из README_js.md пользователем