- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
private static function getKey($len = 8)
{
global $db;
$chars = 'QWERTYUIOPASDFGHJKLZXCVBNM0123456789';
$key = '';
for ($i = 0; $i < $len; $i++)
{
$key .= substr($chars, rand(1, strlen($chars)) - 1, 1);
}
if ($db -> select(
'SELECT *
FROM ' . self::$t_main .
' WHERE `key` = "' . $key . '"'))
{
return ModelTickets::getKey();
}
return $key;
}
"Генератор" уникального ключа.
Автор кода когда-то хотел к нам на работу устроиться. Но всё как-то не срасталось, а потом другую работу нашёл. Я об этом долгое время жалел, но потом я нашёл вот этот код, за его авторством. И я понял, б-г есть, уберёг контору от страшного.
Рекурсия по базе данных - это надо иметь особый склад ума.
Автор, видимо, с функцианальных языков пришёл.
P.S. Кстати, после коллизии $len будет всегда 8. Не айс.
А что, среди императивщиков знать рекурсию - моветон?
Вай? pow(36, 8) = 2821109907456 же, если рандом хороший.
Скорее 32768 вызовов - это лимит рекурсии в PHP.
Этакий недоGUID.
или http://php.net/manual/ru/function.mcrypt-create-iv.php - для тру секьюрных парней (для ключей нафиг не надо).
http://php.net/manual/en/function.uniqid.php - но советую курнуть манул. Это немного не то, что хотелось бы.
Там ещё в комментах есть 200-строчная хуйня для генерации юидов 4 версии. Но как по мне, то 200-строчная хуйня ради юида - это блядь пиздец.
Ага. В 2015 году генерация uuid'ов должна быть в стандартной либе.
super program language?
"Shitafaka: http://php.net/manual/en/function.uniqid.php - но советую курнуть манул. Это немного не то, что хотелось бы."
"Мануал: uniqid — Получает уникальный идентификатор, основанный на текущем времени в микросекундах."
Эта функция не создает ни случайную ни трудно подбираемую строку. Нельзя использовать эту функцию в целях повышения безопасности. Используйте криптографически безопасные функции/генераторы случайных данных, и криптографически защищенные хэш-функции для создания непредсказуемых безопасных ID.