Как создать GUID / UUID на JavaScript

Как создать GUID / UUID на JavaScript

Введение

В программировании, 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 для генерации уникальных идентификаторов. Выбор метода зависит от ваших потребностей и ограничений. Обратите внимание, что некоторые методы могут быть более подходящими для определенных сценариев, например, если вам нужна криптографическая безопасность или детерминированность. При выборе соответствующего метода не забывайте учитывать также производительность и удобство использования.

Читайте так же  Как заменить все вхождения строки в JavaScript: 8 эффективных способов