Мне нужно создать случайное число с 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);
сделанный.