Нужна функция для генерации 5 случайных латинских символов на PHP
Надеюсь не захейтите меня за возможно "простой" вопрос, хотя на прошлый "сложный" по JWT так никто и не ответил)) Не суть.
Пишу Api на ларке. Мне нужно при успешном бронировании мест генерировать в базу УНИКАЛЬНЫЙ КОД БРОНИРОВАНИЯ, состоящий из 5 латинских символов и его же потом возвращать юзеру. Уникальный код бронирования желательно в апперкейсе.
Знаю пару функций в php - rand(); uniqid(); . Первая не подходит, т.к. генерит только числа, а вторая генерит и то и другое, но по дефолту 13 символов. Исходя из задания, мне нужно ИМЕННО 5. Латинских.
В нэте только варианты с двумя этими выше упомянутыми функциями, либо с написанием собственных. Разве встроенных уже нет таких?
Ну и если нет, хотелось бы тогда увидеть компактный вариант реализации данной задачи, чтобы запомнить несложно было.
Спасибо!
Ответы (3 шт):
Встроенной функции нет! Возможно вам поможет это
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;
}
use Illuminate\Support\Str;
public function getCode()
{
$random = Str::random(5);
return Str::upper($random);
}