UUID (Universally Unique Identifier) представляет собой 128-битный идентификатор, используемый для уникальной идентификации объектов в распределённых системах. Стандарт UUID описывает несколько версий, каждая из которых формируется по разным правилам и имеет собственные особенности генерации.
Классический UUID представлен строкой формата:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
где:
x — шестнадцатеричный символ;M — версия UUID;N — вариант (variant), определяющий спецификацию.Пример UUID:
550e8400-e29b-41d4-a716-446655440000
Ключевым элементом при валидации является именно версия, так как она определяет допустимые правила формирования строки.
Существует несколько стандартизированных версий UUID:
UUID версии 1 формируется на основе:
Особенности:
UUID v2 применяется в контексте DCE (Distributed Computing Environment).
Особенности:
UUID v3 формируется с использованием:
Особенности:
UUID v4 является наиболее распространённым вариантом.
Особенности:
UUID v5 аналогичен v3, но использует SHA-1 вместо MD5.
Особенности:
Библиотека Validator.js предоставляет функцию:
isUUID(str [, version])
которая проверяет, соответствует ли строка формату UUID.
Простейший вариант использования:
const validator = require('validator');
validator.isUUID('550e8400-e29b-41d4-a716-446655440000');
Результат:
true — строка соответствует UUID любого допустимого
формата.Validator.js позволяет указать версию UUID:
validator.isUUID('550e8400-e29b-41d4-a716-446655440000', 4);
Допустимые значения:
1 — UUID v13 — UUID v34 — UUID v45 — UUID v5"all" — любая версияПроверка v1 учитывает:
Пример:
validator.isUUID('f47ac10b-58cc-11cf-a1a1-0242ac120002', 1);
Для v3 и v5 ключевым является формат, а не содержимое:
validator.isUUID('3b12f1df-5232-3a7c-8c3a-5b9d5b2c3a11', 3);
validator.isUUID('886313e1-3b8a-5372-9b90-0c9aee199e5d', 5);
Validator.js не проверяет корректность namespace или hash-источника, только структуру.
UUID v4 имеет строгую проверку случайной структуры:
validator.isUUID('3d813cbb-47fb-32ba-91df-831e1593ac29', 4);
Особенность:
false.UUID может содержать:
a-f);A-F);0-9).Validator.js не чувствителен к регистру:
validator.isUUID('550E8400-E29B-41D4-A716-446655440000', 4);
Результат будет корректным при соблюдении структуры.
Validator.js использует регулярные выражения, адаптированные под каждую версию UUID.
Общая логика включает:
UUID v4 часто ошибочно проверяется как v1 или наоборот:
validator.isUUID(uuid, 1); // false для v4
UUID без дефисов не проходит валидацию:
550e8400e29b41d4a716446655440000
Результат:
falseЛюбое отклонение от 36 символов автоматически делает строку невалидной.
В позиции версии допустимы только значения:
1345Любое другое значение приводит к ошибке валидации.
Валидация UUID часто применяется в:
Пример проверки входного параметра:
function validateUserId(id) {
if (!validator.isUUID(id, 4)) {
throw new Error('Некорректный идентификатор пользователя');
}
}
UUID-валидация часто используется вместе с:
isEmpty — проверка пустых значений;trim — очистка строки;normalizeEmail — в системах с привязкой UUID к
email.Пример цепочки обработки:
const id = input.trim();
if (!validator.isUUID(id, 5)) {
return false;
}
validator.isUUID(str); // любая версия
validator.isUUID(str, 'all'); // аналогично
и
validator.isUUID(str, 4); // строго UUID v4
Строгая проверка применяется в системах, где важно различать источники генерации идентификаторов, тогда как общая используется при отсутствии требований к версии.
Validator.js приводит входные данные к строке, однако:
null → falseundefined → falseПример:
validator.isUUID(null); // false
validator.isUUID(123); // false