Функция cot_unique в Cotonti

Функция cot_unique генерирует случайную строку в пределах шестнадцатеричного диапазона с указанной длиной. Обычно такая строка используется для создания уникальных идентификаторов или ключей, которые сложно предсказать.

Подробное объяснение работы функции:

/**
 * Generates random string within hexadecimal range
 *
 * @param int $length Length
 * @return string
 */
function cot_unique($length = 16)
{
    $string = sha1(mt_rand());
    if ($length > 40)
    {
        for ($i=0; $i < floor($length / 40); $i++)
        {
            $string .= sha1(mt_rand());
        }
    }
    return(substr($string, 0, $length));
}


Параметры:

$length (int) — длина строки, которую нужно сгенерировать. По умолчанию равна 16 символам.

Важно: длина строки не может быть меньше 1, иначе функция вернёт пустую строку.

Алгоритм работы функции:

Генерация случайного числа:

$string = sha1(mt_rand());


mt_rand() генерирует случайное целое число. Это число используется как вход для хэш-функции sha1().
sha1() создает 40-символьную строку в шестнадцатеричной системе счисления, которая является уникальной для каждого вызова mt_rand().
В начале создается строка $string, которая уже содержит 40 символов, полученных из первого вызова sha1(mt_rand()).

Проверка и повторная генерация, если необходима большая длина:

if ($length > 40)
{
    for ($i = 0; $i < floor($length / 40); $i++)
    {
        $string .= sha1(mt_rand());
    }
}

 

Если требуется строка длиной больше 40 символов (так как sha1() всегда генерирует строку длиной 40 символов), то в цикле генерируются дополнительные 40-символьные строки с помощью повторных вызовов sha1(mt_rand()).
Каждый раз результат хэширования добавляется к переменной $string.


Обрезка строки до нужной длины:

return(substr($string, 0, $length));


После того как строка из нескольких вызовов sha1() будет сгенерирована, она обрезается до требуемой длины с помощью функции substr().
Возвращается подстрока длиной $length символов.


Пример работы функции:

        if (!cot_error_found()) {
            $ruserpass = array();
            $ruserpass['user_passsalt'] = cot_unique(16);
            $ruserpass['user_passfunc'] = empty(Cot::$cfg['hashfunc']) ? 'sha256' : Cot::$cfg['hashfunc'];
            $ruserpass['user_password'] = cot_hash($rnewpass1, $ruserpass['user_passsalt'], $ruserpass['user_passfunc']);
            Cot::$db->update(Cot::$db->users, $ruserpass, "user_id=" . Cot::$usr['id']);
            unset($ruserpass);
            cot_message('Password_updated');
        }


Пример с длиной по умолчанию (16 символов):

echo cot_unique();

Выведет что-то вроде:

d3b07384d113edec49eaa6238ad5ff00


Пример с указанием длины 32 символа:

echo cot_unique(32);

Выведет что-то вроде:


d3b07384d113edec49eaa6238ad5ff00b09b


Пример с указанием длины 64 символа:

echo cot_unique(64);

Выведет что-то вроде:


d3b07384d113edec49eaa6238ad5ff00b09b6e7a1b9e292a73bf1d3b44c5b722


Примечания:
Производительность:

Хэширование с помощью sha1() не является тяжёлым процессом, но для очень больших строк с высокой длиной (например, > 200 символов) эта функция может потребовать больше времени.
Однако функция использует достаточно быстрые алгоритмы генерации случайных чисел, такие как mt_rand(), и эффективность её работы в большинстве случаев будет удовлетворительной.


Уникальность:

Алгоритм генерирует случайную строку, но стоит помнить, что теоретически существует вероятность коллизий, даже если это очень маловероятно (так как sha1() создает строку из 40 символов, что даёт достаточно большое пространство для уникальности).


Использование:

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


Заключение:
Функция cot_unique представляет собой удобный способ генерации случайных строк фиксированной длины, которые содержат только символы из шестнадцатеричной системы счисления. Это может быть полезно для создания уникальных ключей, токенов, или других значений, требующих случайности и трудно предсказуемости.

 

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 21.01.2025 13:59
  • Последнее обновление: 21.01.2025 13:59