Создание 10-значной строки случайного подтверждения php

Я пытаюсь создать «код подтверждения» для каждой учетной записи пользователя, созданной на моем веб-сайте, и хранить ее в 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