Введение
В программировании, GUID (Globally Unique Identifier) или UUID (Universally Unique Identifier) – это уникальный идентификатор, который используется для идентификации объектов и сущностей в системе. GUID / UUID может быть полезным во многих сценариях, таких как генерация уникальных имен файлов, идентификация записей базы данных и т.д. В этой статье мы рассмотрим, как создать GUID / UUID на JavaScript.
1. Использование встроенной Math.random() функции
JavaScript имеет встроенную функцию Math.random(), которая генерирует случайное число от 0 до 1. Мы можем использовать эту функцию в комбинации с другими встроенными функциями для создания GUID / UUID.
function generateGuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0,
v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
console.log(generateGuid()); // Вывод: "6b9ab1ba-e5ca-4ef4-b6f2-0573410a5abd"
2. Использование сторонних библиотек
Если вам не нравится использовать встроенные функции JavaScript, вы также можете обратиться к сторонним библиотекам для генерации GUID / UUID. Некоторые из популярных библиотек включают в себя uuid, node-uuid и guid. Вот пример использования библиотеки uuid:
const uuid = require('uuid');
console.log(uuid.v4()); // Вывод: "110ec58a-a0f2-4ac4-8393-c866d813b8d1"
3. Использование Web API
JavaScript также предлагает некоторые Web API для генерации GUID / UUID. Одним из них является crypto.randomUUID()
метод, который предоставляет доступ к криптографической генерации случайных чисел.
console.log(crypto.randomUUID()); // Вывод: "e0e541e7-3aaa-49ff-949b-ccf11e2c57f4"
4. Использование временной метки и случайного числа
Еще один способ создания GUID / UUID – это комбинация временной метки и случайного числа. Это обычно делается путем использования текущего времени и генерации случайного числа.
function generateGuid() {
var timestamp = new Date().getTime();
var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (timestamp + Math.random() * 16) % 16 | 0;
timestamp = Math.floor(timestamp / 16);
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
return guid;
}
console.log(generateGuid()); // Вывод: "110ec58a-a0f2-4ac4-8393-c866d813b8d1"
5. Использование GUID / UUID библиотеки
Если вы хотите иметь больше контроля над созданным GUID / UUID, вы можете использовать специализированные библиотеки, которые предлагают различные параметры для настройки и генерации уникальных идентификаторов. Некоторые из таких библиотек включают в себя uuid-1345 и nanoid.
const { v4: uuidv4 } = require('uuid');
console.log(uuidv4()); // Вывод: "045d0b11-1b11-4462-b264-48f255d2c613"
6. Генерация GUID / UUID в браузере
Если вы хотите создать GUID / UUID в браузере, вы можете использовать JavaScript Web API для генерации случайных чисел. Примером такого API является crypto.getRandomValues()
метод, который генерирует криптографически безопасные случайные значения.
function generateGuid() {
var data = new Uint32Array(4);
window.crypto.getRandomValues(data);
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c, index) {
var r = (data[index >> 3] >> ((index % 8) * 4)) & 15;
var v = c === 'x' ? r : (r % 4 + 8);
return v.toString(16);
});
}
console.log(generateGuid()); // Вывод: "7e4ef4e4-632a-45e7-af75-4bb6b297dd66"
7. Использование Math.random() и ASCII таблицы
Другой способ создания GUID / UUID – это комбинация Math.random() и ASCII таблицы. Мы можем использовать Math.random() для генерации случайных чисел и преобразовать их в символы из ASCII таблицы.
function generateGuid() {
var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 36 | 0;
var v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(36);
});
return guid;
}
console.log(generateGuid()); // Вывод: "a8iicb-jd84-4pei-kwaa-6f8gp9d37ew5"
8. Использование npm пакета uuid-random
В npm существует множество пакетов для генерации GUID / UUID, и одним из них является uuid-random. Вы можете установить этот пакет с помощью команды npm install uuid-random
и использовать его для генерации уникальных идентификаторов.
const uuid = require('uuid-random');
console.log(uuid()); // Вывод: "1ea9f7c0-38f1-487e-86b0-5a5a3bab54f4"
9. Генерация GUID / UUID на основе идентификатора пользователя
Если у вас есть система аутентификации пользователей и вы хотите создать GUID / UUID на основе идентификатора пользователя, вы можете комбинировать их значения для создания уникальных идентификаторов.
function generateGuid(userId) {
var guid = userId + '-' + 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0;
var v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
return guid;
}
console.log(generateGuid('johnsmith')); // Вывод: "johnsmith-0f097e94-7905-46c2-b76f-5e775dd76559"
10. Использование uuidv5 для получения детерминированного GUID / UUID
uuidv5 – это модуль uuid, который позволяет создавать детерминированные GUID / UUID на основе входных данных. Вы можете использовать этот модуль для создания уникального идентификатора на основе имени домена или URL.
const { v5: uuidv5 } = require('uuid');
const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341';
const name = 'example.com';
console.log(uuidv5(name, MY_NAMESPACE)); // Вывод: "5df41881-3aed-5b36-9ece-057f8e4c66f2"
11. Вывод
В этой статье мы рассмотрели разные способы создания GUID / UUID на JavaScript. Вы можете использовать встроенные функции, сторонние библиотеки или Web API для генерации уникальных идентификаторов. Выбор метода зависит от ваших потребностей и ограничений. Обратите внимание, что некоторые методы могут быть более подходящими для определенных сценариев, например, если вам нужна криптографическая безопасность или детерминированность. При выборе соответствующего метода не забывайте учитывать также производительность и удобство использования.