Схожий на відповідь Бреда Крісті , але використовуючи sha1алроритм для символів 0-9a-zA-Zі з префіксом випадковою величиною:
$str = substr(sha1(mt_rand() . microtime()), mt_rand(0,35), 5);
Але якщо ви встановили визначені (дозволені) символи:
$validChars = array('0','1','2' /*...*/,'?','-','_','a','b','c' /*...*/);
$validCharsCount = count($validChars);
$str = '';
for ($i=0; $i<5; $i++) {
$str .= $validChars[rand(0,$validCharsCount - 1)];
}
** ОНОВЛЕННЯ **
Як зазначав Архімедікс , це не гарантує повернення "найменшої можливості отримання дублювання", оскільки кількість комбінацій є низьким для даного діапазону символів. Вам або потрібно буде збільшити кількість символів, або дозволити додаткові (спеціальні) символи в рядку. Перше рішення було б кращим, я думаю, у вашому випадку.
0-9a-zA-Z?