Уникальный ключ (Алгоритм)? Привет всем хабра сообществу.
Поставленная задача:
Периодически создавать уникальные ключи в очень больших количествах (Примерно: 500 000 — 2 000 000). Все эти ключи должны быть полностью уникальны, для последующих функций приложения. Длина ключа может изменяться в зависимости от количества. Старт начинаеться с 8 символов. Ключ должен подлежать паттерну: /^[a-zA-Z0-9]+$/
Общее количество ключей неизвестно (Можеть быть даже более 1 млрд.)
Суть проблемы заключаеться в вычеслении этого ключа. Лично я бы предпочел использование:
1. uniqid, но увы, он не очень то и подходит, так как количество симоволов можеть быть разное (а здесь не менее 13).
2. Случайное вычесление (rand, mt_rand) — но они не гарантируют 100% уникальности.
3. md5(time() + $randHash) — но увы, длина аж 32 символа
Вопрос: Возможно кто-то знает какой-то хороший алгоритм генерации рандомного ключа по количеству символов? Если в алгоритме будут дополнительные параметры для генерации, которые нужно будет достать при генерации (модуль, часовую метку, другое), которые влияют на создания уникального ключа, то не проблема, ключи сохраяються в БД.
Примитивные пример в жизни — это скретч коды для пополнения телефонов. Есть набор ключей, которые просто напросто не совпадают :)
Спасибо!

21 Авг 2019 в 06:14
173 +1
0
Ответы
1

Для генерации уникальных ключей с заданной длиной и паттерном /^[a-zA-Z0-9]+$/ можно воспользоваться следующим алгоритмом:

Сгенерировать случайную строку из символов a-z, A-Z, 0-9 заданной длины.Проверить уникальность сгенерированного ключа.Если ключ уже существует, повторить шаг 1.Если ключ уникален, сохранить его в базу данных.

Пример реализации на PHP:

function generateRandomKey($length) {
$characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$key = '';
for ($i = 0; $i < $length; $i++) {
$key .= $characters[rand(0, strlen($characters) - 1)];
}
return $key;
}
$keysToGenerate = 500000;
$length = 8;
for ($i = 0; $i < $keysToGenerate; $i++) {
$key = generateRandomKey($length);
// Проверка уникальности ключа и сохранение в базу данных
}

Этот алгоритм генерирует случайную строку заданной длины из символов a-z, A-Z, 0-9 и проверяет уникальность ключей перед их сохранением в базу данных. При необходимости дополнительных параметров для генерации уникального ключа (например, часовой метки), их можно также использовать в функции генерации ключа.

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

20 Апр 2024 в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир