Я пытаюсь создать «код подтверждения» для каждой учетной записи пользователя, созданной на моем веб-сайте, и хранить ее в db вместе со своей личной информацией. Как вы можете видеть в приведенном ниже примере, я попытался создать случайную факторизацию строки во временной переменной, однако строка не имеет долгого времени.
Я бы хотел, чтобы строка была короче той, что была создана md5
Мне было интересно, есть ли относительно простой способ генерации 10-значной (макс.) Буквенно-цифровой строки, которая имеет чрезвычайно низкую скорость столкновения?
То, что я пробовал:
md5(mt_rand(10000,99999).time() . 'example@domain.com');
Вывод:
0dd6854dba19e70cfda0ab91595e0376
PHP предоставляет функцию openssl_random_pseudo_bytes
которая может быть сделана для безопасного выполнения того, что вы хотите.
Сделайте что-то вроде:
bin2hex(openssl_random_pseudo_bytes(5))
Вышеприведенное даст вам нечто вроде e9d196aa14
, например.
В качестве альтернативы просто возьмите первые 10 символов существующей строки MD5.
Это создаст вам произвольную строку вывода из Aa-Zz
и 0-9
символов.
function genString($length) { $lowercase = "qwertyuiopasdfghjklzxcvbnm"; $uppercase = "ASDFGHJKLZXCVBNMQWERTYUIOP"; $numbers = "1234567890"; $specialcharacters = "{}[];:,./<>?_+~!@#"; $randomCode = ""; mt_srand(crc32(microtime())); $max = strlen($lowercase) - 1; for ($x = 0; $x < abs($length/3); $x++) { $randomCode .= $lowercase{mt_rand(0, $max)}; } $max = strlen($uppercase) - 1; for ($x = 0; $x < abs($length/3); $x++) { $randomCode .= $uppercase{mt_rand(0, $max)}; } $max = strlen($specialcharacters) - 1; for ($x = 0; $x < abs($length/3); $x++) { $randomCode .= $specialcharacters{mt_rand(0, $max)}; } $max = strlen($numbers) - 1; for ($x = 0; $x < abs($length/3); $x++) { $randomCode .= $numbers{mt_rand(0, $max)}; } return str_shuffle($randomCode); }
Применение
$str = genString(10);
Я думаю, что лучший способ
$random = substr(number_format(time() * rand(),0,'',''),0,10); // you can increase the digits by changing 10 to desired digit
Пожалуйста, проверьте это
Попробуйте использовать http://php.net/manual/en/function.str-split.php