Google Apps Script: Как сгенерировать UUID?

Что такое UUID (Universally Unique Identifier) и зачем он нужен?

UUID (Universally Unique Identifier), или GUID (Globally Unique Identifier), — это 128-битный номер, используемый для уникальной идентификации информации в компьютерных системах. Основная цель UUID – обеспечить уникальность идентификаторов в распределенных системах без централизованной координации. Это означает, что можно генерировать UUID’ы на разных машинах, и вероятность коллизии (совпадения) крайне мала.

UUID состоит из нескольких частей, представляемых в шестнадцатеричном формате, например: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx, где x – любая шестнадцатеричная цифра, а y – одна из 8, 9, A, или B. Цифра 4 указывает на версию UUID (в данном случае, версия 4, которая генерируется на основе случайных чисел).

Примеры использования UUID в Google Apps Script: идентификация объектов, генерация уникальных ключей и т.д.

UUID широко применяются в Google Apps Script для решения различных задач, где требуется уникальная идентификация объектов или данных:

Идентификация строк в Google Sheets: При работе с таблицами важно иметь возможность однозначно идентифицировать каждую строку, даже если порядок строк меняется.

Генерация ключей для хранения данных в PropertiesService: UUID могут служить надежными ключами для хранения данных, обеспечивая уникальность.

Идентификация событий в Google Calendar: Каждое событие может быть идентифицировано уникальным UUID, что упрощает синхронизацию и управление событиями.

Отслеживание взаимодействий пользователей: UUID можно использовать для присвоения уникального идентификатора каждому пользователю или сессии, что позволяет отслеживать действия и анализировать поведение.

Способы генерации UUID в Google Apps Script

Реализация генератора UUID с использованием Math.random() и toHex()

Простейший способ генерации UUID в Google Apps Script – использовать встроенный объект Math.random() для генерации случайных чисел и метод toString(16) для преобразования их в шестнадцатеричный формат. Вот пример реализации:

/**
 * Генерирует UUID версии 4.
 * @returns {string} UUID в формате xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
 */
function generateUUID(): string {
  /**
   * Генерирует случайную шестнадцатеричную строку указанной длины.
   * @param {number} length Длина строки.
   * @returns {string} Случайная шестнадцатеричная строка.
   */
  function s4(length: number): string {
    return Math.floor((1 + Math.random()) * 0x10000)
      .toString(16)
      .substring(1, length + 1);
  }

  return s4(4) + s4(2) + '-' + s4(2) + '-' + '4' + s4(3) + '-' + s4(1) + s4(3) + '-' + s4(4) + s4(4) + s4(4);
}

// Пример использования:
const uuid: string = generateUUID();
Logger.log(uuid);

Объяснение принципа работы алгоритма генерации UUID (версия 4)

Функция generateUUID генерирует UUID версии 4, следуя стандартному формату. Она использует вспомогательную функцию s4 для генерации случайных шестнадцатеричных строк разной длины. В UUID версии 4 несколько битов зарезервированы: 4 в третьей группе (xxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx) указывает на версию, а y (один из 8, 9, A, или B) – на вариант UUID. Остальные биты заполняются случайными значениями.

Преимущества и недостатки данного метода: простота, но потенциальная возможность коллизий

Преимущества:

Простота реализации: Код легко понять и реализовать.

Не требует внешних зависимостей: Использует только встроенные функции JavaScript.

Недостатки:

Потенциальная возможность коллизий: Хотя вероятность коллизии крайне мала, она существует, особенно при генерации большого количества UUID’ов.

Зависимость от Math.random(): Качество случайных чисел, генерируемых Math.random(), может быть недостаточным для критически важных приложений, где требуется высокая степень уникальности.

Более надежные методы генерации UUID (если необходима высокая уникальность)

Использование внешних API для генерации UUID (пример с сервисом, предоставляющим UUID)

Если требуется более высокая гарантия уникальности UUID’ов, можно использовать внешние API, предоставляющие услуги генерации UUID. Один из таких сервисов — https://www.uuidtools.com/api/generate/v4.

Разбор кода для работы с API: отправка запроса и обработка ответа

/**
 * Генерирует UUID с использованием внешнего API.
 * @returns {string | null} UUID или null в случае ошибки.
 */
function generateUUIDFromAPI(): string | null {
  try {
    const response: GoogleAppsScript.URL_Fetch.HTTPResponse = UrlFetchApp.fetch('https://www.uuidtools.com/api/generate/v4');
    const json: string = response.getContentText();
    const data: string[] = JSON.parse(json);
    return data[0] || null; // API возвращает массив UUID'ов, берем первый.
  } catch (e) {
    Logger.log(`Ошибка при получении UUID из API: ${e}`);
    return null;
  }
}

// Пример использования:
const uuidFromAPI: string | null = generateUUIDFromAPI();
if (uuidFromAPI) {
  Logger.log(uuidFromAPI);
} else {
  Logger.log('Не удалось получить UUID из API.');
}
Реклама

В этом примере используется UrlFetchApp для отправки GET-запроса к API. Ответ, полученный в формате JSON, парсится, и из него извлекается UUID. Обратите внимание на обработку ошибок: в случае возникновения исключения возвращается null.

Альтернативные библиотеки или сниппеты для генерации UUID в Google Apps Script

Хотя встроенных библиотек для генерации UUID в Google Apps Script нет, существуют сторонние сниппеты, которые можно адаптировать и использовать. Поиск в интернете по запросу "javascript uuid generator" позволит найти множество вариантов.

Примеры использования сгенерированных UUID на практике

Создание уникальных идентификаторов для строк в Google Sheets

/**
 * Добавляет UUID в столбец A для каждой строки в Google Sheets, где он отсутствует.
 */
function addUUIDToSheet(): void {
  const sheet: GoogleAppsScript.Spreadsheet.Sheet = SpreadsheetApp.getActiveSheet();
  const lastRow: number = sheet.getLastRow();
  const dataRange: GoogleAppsScript.Spreadsheet.Range = sheet.getDataRange();
  const values: any[][] = dataRange.getValues();

  for (let i = 1; i < lastRow; i++) { // Начинаем с 1, чтобы пропустить заголовок.
    if (!values[i][0]) { // Если в столбце A нет значения (UUID).
      const uuid: string = generateUUID(); // Генерируем UUID.
      sheet.getRange(i + 1, 1).setValue(uuid); // Записываем UUID в столбец A.
    }
  }
}

Этот код добавляет UUID в первый столбец (A) для каждой строки в активном листе Google Sheets, где UUID еще не существует.

Генерация UUID для идентификации новых событий в Google Calendar

/**
 * Создает новое событие в Google Calendar с UUID в описании.
 */
function createCalendarEventWithUUID(): void {
  const calendar: GoogleAppsScript.Calendar.Calendar = CalendarApp.getDefaultCalendar();
  const event: GoogleAppsScript.Calendar.CalendarEvent = calendar.createEvent(
    'Новое событие с UUID',
    new Date(),
    new Date(new Date().getTime() + 3600000), // Продолжительность 1 час.
    { description: `UUID: ${generateUUID()}` }
  );
  Logger.log(`Создано событие: ${event.getTitle()}, ID: ${event.getId()}`);
}

В этом примере создается новое событие в Google Calendar, а сгенерированный UUID добавляется в описание события.

Использование UUID в качестве ключей для данных, хранящихся в PropertiesService

/**
 * Сохраняет данные в PropertiesService, используя UUID в качестве ключа.
 */
function saveDataWithUUID(): void {
  const properties: GoogleAppsScript.Properties.Properties = PropertiesService.getScriptProperties();
  const uuid: string = generateUUID();
  const data: string = 'Some important data';
  properties.setProperty(uuid, data);
  Logger.log(`Данные сохранены с ключом: ${uuid}`);

  // Пример извлечения данных:
  const retrievedData: string | null = properties.getProperty(uuid);
  if (retrievedData) {
    Logger.log(`Извлеченные данные: ${retrievedData}`);
  }
}

Этот код сохраняет данные в PropertiesService, используя сгенерированный UUID в качестве ключа.

Заключение

Краткое резюме различных подходов к генерации UUID в Google Apps Script

В Google Apps Script существует несколько способов генерации UUID: от простого использования Math.random() до применения внешних API. Выбор метода зависит от требований к уникальности и надежности генерируемых идентификаторов.

Рекомендации по выбору метода генерации UUID в зависимости от требований проекта

Для простых задач, где не требуется абсолютная гарантия уникальности, подойдет метод с использованием Math.random(). Этот метод прост в реализации и не требует внешних зависимостей.

Если требуется более высокая степень уникальности, рекомендуется использовать внешние API. Эти сервисы используют более сложные алгоритмы и обеспечивают более высокую надежность.

При работе с конфиденциальными данными или в проектах, где важна безопасность, необходимо тщательно выбирать API и учитывать возможные риски, связанные с передачей данных третьим сторонам.


Добавить комментарий