Задать вопрос
taral
@taral
php программист

Генерация уникального ID

На сайте постоянно создаются заказы. На каждый заказ необходимо сгенерировать уникальный id. Он должен быть достаточно простым для восприятия человеком и обязательно не должен повторятся.
Нельзя использовать id с базы данных и как либо на него ориентироваться.
Пока придумал подвязаться на time() и частично перевести его в цифры. Для лучшей читаемости.
Примерно так
код PHP
$letters='QWERTYUIOPASDFGHJKLZXCVBNM1234567890';
$count=strlen($letters);
$intval=time();
$result='';
for($i=0;$i<4;$i++) {
        $last=$intval%$count;
        $intval=($intval-$last)/$count;
        $result.=$letters[$last];
}
echo $result.$intval;


в результате получаю примерно такой код WKI0-811
в конец добавляю rand(10,99) для исключения дубляжей в ту же секунду. Получаю такое WKI0-811-45
Длинна и сложность кода устраивает. Не нравится 1. Возможность дубляжей хоть и очень небольшая. 2. Окончание 811 очень редко изменяется. Поскольку это грубо говоря года из time().
Также я уверен что есть более красивые решения. Спасибо за внимание
  • Вопрос задан
  • 51470 просмотров
Подписаться 12 Оценить 1 комментарий
Ответ пользователя Max К ответам на вопрос (16)
7workers
@7workers
когда-то решал точно такую же задачу, пришел к тому, что скрипт генерировал гарантированно уникальные ID и складывал в буффер, кому нужно было просто брали из буффера.
Ответ написан
Комментировать