- 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;
}
"Генератор" уникального ключа.
Автор кода когда-то хотел к нам на работу устроиться. Но всё как-то не срасталось, а потом другую работу нашёл. Я об этом долгое время жалел, но потом я нашёл вот этот код, за его авторством. И я понял, б-г есть, уберёг контору от страшного.
Рекурсия по базе данных - это надо иметь особый склад ума.
bormand 10.03.2015 09:15 # +2
Автор, видимо, с функцианальных языков пришёл.
P.S. Кстати, после коллизии $len будет всегда 8. Не айс.
kegdan 10.03.2015 09:32 # 0
А что, среди императивщиков знать рекурсию - моветон?
roman-kashitsyn 10.03.2015 09:53 # +1
kegdan 10.03.2015 10:08 # 0
dxd 10.03.2015 16:31 # +1
heyzea1 10.03.2015 17:39 # 0
Stallman 11.03.2015 00:32 # 0
bormand 11.03.2015 06:29 # +1
Shitafaka 11.03.2015 06:50 # 0
bormand 11.03.2015 06:53 # 0
Вай? pow(36, 8) = 2821109907456 же, если рандом хороший.
Shitafaka 11.03.2015 06:57 # 0
Shitafaka 11.03.2015 07:00 # 0
bormand 11.03.2015 07:31 # 0
Скорее 32768 вызовов - это лимит рекурсии в PHP.
Vasiliy 11.03.2015 13:34 # 0
Stallman 11.03.2015 00:39 # 0
Shitafaka 11.03.2015 06:53 # +1
bormand 11.03.2015 07:33 # 0
Этакий недоGUID.
Resha 12.03.2015 17:31 # 0
или http://php.net/manual/ru/function.mcrypt-create-iv.php - для тру секьюрных парней (для ключей нафиг не надо).
chtulhu 11.03.2015 07:26 # +1
Shitafaka 11.03.2015 08:06 # 0
http://php.net/manual/en/function.uniqid.php - но советую курнуть манул. Это немного не то, что хотелось бы.
Там ещё в комментах есть 200-строчная хуйня для генерации юидов 4 версии. Но как по мне, то 200-строчная хуйня ради юида - это блядь пиздец.
bormand 11.03.2015 08:54 # 0
Ага. В 2015 году генерация uuid'ов должна быть в стандартной либе.
kegdan 11.03.2015 09:18 # +1
Shitafaka 11.03.2015 09:21 # 0
Shitafaka 11.03.2015 09:18 # 0
kegdan 11.03.2015 09:22 # +1
super program language?
Shitafaka 11.03.2015 09:23 # 0
kegdan 11.03.2015 09:25 # 0
Resha 12.03.2015 17:34 # 0
"Shitafaka: http://php.net/manual/en/function.uniqid.php - но советую курнуть манул. Это немного не то, что хотелось бы."
"Мануал: uniqid — Получает уникальный идентификатор, основанный на текущем времени в микросекундах."
Shitafaka 12.03.2015 19:31 # 0
Эта функция не создает ни случайную ни трудно подбираемую строку. Нельзя использовать эту функцию в целях повышения безопасности. Используйте криптографически безопасные функции/генераторы случайных данных, и криптографически защищенные хэш-функции для создания непредсказуемых безопасных ID.
Resha 12.03.2015 21:05 # +1
mrsol 11.03.2015 12:02 # 0
Vasiliy 11.03.2015 13:36 # 0