php random x digit number

Мне нужно создать случайное число с x количеством цифр.

Поэтому давайте скажем, что x равно 5, мне нужно число, например. 35562 Если x равно 3, тогда он будет отбрасывать что-то вроде; 463

Может ли кто-нибудь показать мне, как это делается?

Вы можете использовать rand() вместе с pow() чтобы это произошло:

 $digits = 3; echo rand(pow(10, $digits-1), pow(10, $digits)-1); 

Это выведет число от 100 до 999. Это потому, что 10 ^ 2 = 100 и 10 ^ 3 = 1000, а затем вам нужно вычесть его с помощью одного, чтобы получить его в нужном диапазоне.

Если 005 также является допустимым примером, вы должны использовать следующий код, чтобы поместить его с ведущими нулями:

 $digits = 3; echo str_pad(rand(0, pow(10, $digits)-1), $digits, '0', STR_PAD_LEFT); 

Вы можете использовать rand($min, $max) для этой цели.

Чтобы ограничить значения значениями с помощью x цифр, вы можете использовать следующее:

 $x = 3; // Amount of digits $min = pow(10,$x); $max = pow(10,$x+1)-1); $value = rand($min, $max); 

Обычно я просто использую RAND() http://php.net/manual/en/function.rand.php

например

 rand ( 10000 , 99999 ); 

для вашего 5-значного случайного числа

Рассматривайте свой номер как список цифр и просто добавляйте случайную цифру каждый раз:

 function n_digit_random($digits) { $temp = ""; for ($i = 0; $i < $digits; $i++) { $temp .= rand(0, 9); } return (int)$temp; } 

Или чисто численное решение:

 function n_digit_random($digits) return rand(pow(10, $digits - 1) - 1, pow(10, $digits) - 1); } 
 function random_numbers($digits) { $min = pow(10, $digits - 1); $max = pow(10, $digits) - 1; return mt_rand($min, $max); } 

Протестировано здесь .

самый простой способ, которым я могу думать, – использовать функцию rand с str_pad

 <?php echo str_pad(rand(0,999), 5, "0", STR_PAD_LEFT); ?> 

В приведенном выше примере он будет генерировать случайное число в диапазоне от 0 до 999 .

И имеет 5 цифр.

сделайте это с помощью цикла:

 function randomWithLength($length){ $number = ''; for ($i = 0; $i < $length; $i++){ $number .= rand(0,9); } return (int)$number; } 

rand или mt_rand

Применение:

 rand(min, max); mt_rand(min, max); 

rand(1000, 9999); работает быстрее, чем x4 раза rand(0,9);

тест:

 rand(1000, 9999) : 0.147 sec. rand(0,9)x4 times : 0.547 sec. 

обе функции выполнялись в 100000 итерациях, чтобы сделать результаты более явными

 function random_number($size = 5) { $random_number=''; $count=0; while ($count < $size ) { $random_digit = mt_rand(0, 9); $random_number .= $random_digit; $count++; } return $random_number; } 

Вот простое решение без каких-либо циклов или любых проблем, которые позволят вам создать случайную строку с символами, цифрами или даже со специальными символами.

$randomNum = substr(str_shuffle("0123456789"), 0, $x);

где $x может быть числом цифр

Например. substr(str_shuffle("0123456789"), 0, 5);

Результаты после нескольких казней

 98450 79324 23017 04317 26479 

Вы можете использовать тот же код для генерации случайной строки, как это

 $randomNum=substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyzABCDEFGHIJKLMNOPQRSTVWXYZ"), 0, $x); 

Результаты с $x = 11

 FgHmqpTR3Ox O9BsNgcPJDb 1v8Aw5b6H7f haH40dmAxZf 0EpvHL5lTKr 

этот простой скрипт будет

 $x = 4;//want number of digits for the random number $sum = 0; for($i=0;$i<$x;$i++) { $sum = $sum + rand(0,9)*pow(10,$i); } echo $sum; 

Это еще одно простое решение для генерации случайного числа из N цифр:

 $number_of_digits = 10; echo substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits); 

Проверьте это здесь: http://codepad.org/pyVvNiof

 function rand_number_available($already_mem_array,$boundary_min,$boundary_max,$digits_num) { $already_mem_array_dim = count($already_mem_array); // dimension of array, that contain occupied elements // --- creating Boundaries and possible Errors if( empty($digits_num) ){ $boundary_dim = $boundary_max - $boundary_min; if($boundary_dim <= 0){ $error = -1; // Error that might happen. Difference between $boundary_max and $boundary_min must be positive }else{ $error = -2; // Error that might happen. All numbers between, $boundary_min and $boundary_max , are occupied, by $already_mem_array } }else{ if($digits_num < 0){ // Error. If exist, $digits_num must be, 1,2,3 or higher $error = -3; }elseif($digits_num == 1){ // if 'one-figure' number $error = -4; // Error that might happen. All 'one-figure' numbers are occupied, by $already_mem_array $boundary_min = 0; $boundary_max = 9; $boundary_dim = $boundary_max-$boundary_min; }elseif($digits_num == 2){ // if 'two-figure' number $error = -5; // Error that might happen. All 'two-figure' numbers are occupied, by $already_mem_array $boundary_min = 10; $boundary_max = 99; $boundary_dim = $boundary_max-$boundary_min; }elseif($digits_num>2){ // if 'X-figure' number. X>2 $error = -6; // Error that might happen. All 'X-figure' numbers are occupied, by $already_mem_array. Unlikely to happen $boundary_min = pow(10, $digits_num-1); // stepenovanje - graduation $boundary_max = pow(10, $digits_num)-1; $boundary_dim = $boundary_max-$boundary_min; } } // ------------------------------------------------------------------- // --- creating response --------------------------------------------- if( ($already_mem_array_dim <= $boundary_dim) && $boundary_dim>0 ){ // go here only if, there are AVAILABLE numbers to extract, and [difference] $boundary_dim , is positive do{ $num = rand($boundary_min,$boundary_max); }while( in_array($num, $already_mem_array) ); $result = $num; }else{ $result = $error; // Limit that happened } return $result; // ------------------------------------------------------------------- } 

вам люди очень любят усложнять вещи 🙂

реальная проблема в том, что OP хочет, вероятно, добавить это к концу некоторого действительно большого числа. если нет, я не могу придумать, для чего это необходимо. поскольку левые нули в любом числе – это просто, ну, левые нули.

поэтому просто добавьте большую часть этого числа в математическую сумму, а не строку.

например

$x = "102384129" . complex_3_digit_random_string();

просто становится

$x = 102384129000 + rand(0, 999);

сделанный.