Уникальный ключ (Алгоритм)? Привет всем хабра сообществу.
Поставленная задача:
Периодически создавать уникальные ключи в очень больших количествах (Примерно: 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
151 +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 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 95 117 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир