Нужна функция для генерации 5 случайных латинских символов на PHP

Надеюсь не захейтите меня за возможно "простой" вопрос, хотя на прошлый "сложный" по JWT так никто и не ответил)) Не суть.

Пишу Api на ларке. Мне нужно при успешном бронировании мест генерировать в базу УНИКАЛЬНЫЙ КОД БРОНИРОВАНИЯ, состоящий из 5 латинских символов и его же потом возвращать юзеру. Уникальный код бронирования желательно в апперкейсе.

Знаю пару функций в php - rand(); uniqid(); . Первая не подходит, т.к. генерит только числа, а вторая генерит и то и другое, но по дефолту 13 символов. Исходя из задания, мне нужно ИМЕННО 5. Латинских.

В нэте только варианты с двумя этими выше упомянутыми функциями, либо с написанием собственных. Разве встроенных уже нет таких?

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

Спасибо!


Ответы (3 шт):

Автор решения: WandererOd

Встроенной функции нет! Возможно вам поможет это

function generator_kods() {
$chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ';
$string = '';
for ($i = 0; $i < 5; $i++)
    $string .= substr($chars, rand(1, 30) - 1, 1);
return $string;
}
→ Ссылка
Автор решения: Ипатьев

Начинающие пользователи очень часто путают понятия уникальности и случайности. В их представлении это одно и тоже. Хотя в реальности это, разумеется, не так.

Учитывая, что нужно именно уникальное значение, а так же то что длина ограничена пятью символами (то есть случайное значение ваще не вариант), у нас остатся только одно, совершенно очевидное и весьма простое решение - конвертировать обычный уникальный автоинкрементный айди из десятичной в 26-ричную систему, где базой будет латинский алфавит.

Для того чтобы сразу получить пятизначный код, просто прибавим к айди миллион

$code = num2alpha($id + 1000000);

function num2alpha($n) {
    $r = '';
    for ($i = 1; $n >= 0 && $i < 10; $i++) {
    $r = chr(0x41 + ($n % pow(26, $i) / pow(26, $i - 1))) . $r;
    $n -= pow(26, $i);
    }
    return $r;
}
→ Ссылка
Автор решения: Kostya Kalitvyansky
use Illuminate\Support\Str;

public function getCode()
{
   $random = Str::random(5);
   return Str::upper($random);
}
→ Ссылка