Общий обзор:
Функция ниже выплевывает случайный идентификатор. Я использую это, чтобы предоставить псевдоним подтверждения идентификации записи. Тем не менее, мне пришлось проверять наличие столкновения (как бы маловероятно), потому что мы используем только пятизначную длину. С допустимыми символами, перечисленными ниже, это составляет около 33 миллионов плюс комбинации. В конце концов мы получим до пяти миллионов записей, поэтому столкновение становится проблемой.
Проблема:
Проверка псевдонимов dupe неэффективна и ресурсоемкая. Пять миллионов записей - это много для поиска. Особенно, когда этот поиск выполняется одновременно разными пользователями.
Мой вопрос:
Есть ли способ "автоматически увеличивать" комбинации, разрешенные этой функцией? Значит, мне нужно искать только последний псевдоним записи и перейти к следующей комбинации?
Признанные ограничения:
Я понимаю, что код будет значительно отличаться от приведенной ниже функции. Я также понимаю, что mysql имеет функцию автоматического увеличения для числовых идентификаторов, но для проекта требуется пятизначный псевдоним с допустимыми символами "23456789ABCDEFGHJKLMNPQRSTUVWXYZ". Мои руки связаны с этой проблемой.
Моя текущая функция:
public function random_id_gen($length)
{
$characters = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
$max = strlen($characters) - 1;
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[mt_rand(0, $max)];
}
return $string;
}