EN · DE · RU · FR · ES

#2759: revisedRandomId.js

projectforge-webapp/src/utilities/revisedRandomId.js Вспомогательная функция (один экспорт) · projectforge-webapp/src/utilities/revisedRandomId.js 4 строки · 4 кода · 0 комментариев · 0 пустых
Компактная функция в одну строку, которая генерирует короткие случайные буквенно-цифровые идентификаторы, используя JavaScript Math.random(), пропущенный через систему счисления с основанием 36. Результат — строка из 10 символов, состоящая из цифр и строчных букв (0-9, a-f плюс g-z), очищенная от любых не буквенно-цифровых артефактов. Используется во фронтенде для создания временных, устойчивых к коллизиям ID для элементов интерфейса, таких как уведомления (toast), динамически вставляемые узлы DOM и временные ключи списков, не требующие криптографической случайности.

Архитектура

Алгоритм

Функция объединяет три операции: Math.random().toString(36) преобразует случайное число с плавающей точкой в представление с основанием 36 (создавая строку вида 0.4kzy9x2n7fl), .replace(/[^a-z0-9]+/g, '') удаляет ведущий 0. и любые другие не буквенно-цифровые артефакты, а .substr(1, 10) извлекает символы, начиная с индекса 1, для получения 10-символьного результата. Смещение начала на 1 пропускает ведущий ноль, который остаётся после удаления десятичной точки.

Почему не crypto.getRandomValues?

Эта функция намеренно не является криптографически безопасной. Она используется для идентификаторов на уровне интерфейса (ключи toast, ключи списков React), где коллизии привели бы лишь к глюку согласования React, а не к уязвимости безопасности. Компромисс — скорость и простота: никаких накладных расходов на крипто API и никакой зависимости от доступности window.crypto.

История Git

КоммитЧто изменилось
993957ec7Два улучшения в генерации случайных ID: (1) класс символов в регулярном выражении был расширен с [^a-z]+ до [^a-z0-9]+, что гарантирует сохранение цифр при фильтрации, увеличивая пространство ID с 26^n до 36^n; (2) начальный индекс substr изменён с 2 на 1, что позволяет получить один дополнительный символ энтропии вместо его отбрасывания. Оба изменения были частью реализации системы действий toast, где требовались более надёжные ID.
6cf072707Создан файл с первоначальной реализацией генератора случайных ID. Использовались substr(2, 10) и регулярное выражение [^a-z]+ — более консервативный подход, который генерировал только буквенные строчные ID длиной ровно 10 символов.