php случайный номер x - PullRequest
       4

php случайный номер x

53 голосов
/ 21 ноября 2011

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

Итак, допустим, х равно 5, мне нужно, чтобы число было, например.35562 Если х равен 3, то он отбросит что-то вроде;463

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

Ответы [ 18 ]

121 голосов
/ 21 ноября 2011

Вы можете использовать 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);
21 голосов
/ 21 ноября 2011

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

например.

rand ( 10000 , 99999 );

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

13 голосов
/ 21 ноября 2011

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

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

$x = 3; // Amount of digits
$min = pow(10,$x);
$max = pow(10,$x+1)-1);
$value = rand($min, $max);
10 голосов
/ 13 июня 2017

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

$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
8 голосов
/ 21 ноября 2011

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

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);
}
7 голосов
/ 21 ноября 2011
function random_numbers($digits) {
    $min = pow(10, $digits - 1);
    $max = pow(10, $digits) - 1;
    return mt_rand($min, $max);
}

Проверено здесь .

6 голосов
/ 30 мая 2015

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

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

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

И имеющие 5 цифр.

6 голосов
/ 21 февраля 2017

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

тест:

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

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

3 голосов
/ 21 ноября 2011

rand или mt_rand сделает ...

использование:

rand(min, max);

mt_rand(min, max);
3 голосов
/ 21 ноября 2011

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

function randomWithLength($length){

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

    return (int)$number;

}
...