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

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

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

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

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

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

Ответы [ 18 ]

2 голосов
/ 30 марта 2016
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;  
}
1 голос
/ 19 июня 2019

Ну, вы можете использовать как простую функцию php mt_rand (2000,9000), которая может генерировать случайное число из 4 цифр

mt_rand(2000,9000) 
0 голосов
/ 19 марта 2015

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

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

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

0 голосов
/ 23 августа 2018

Обратите внимание, что rand() не генерирует криптографически безопасное значение в соответствии с документами:

http://php.net/manual/en/function.rand.php

Эта функция не генерирует криптографически безопасные значения и не должна использоваться в криптографических целях. Если вам нужно криптографически безопасное значение, рассмотрите возможность использования взамен random_int (), random_bytes () или openssl_random_pseudo_bytes ().

Вместо этого лучше использовать random_int(), доступный в PHP 7 (см .: http://php.net/manual/en/function.random-int.php).

Итак, чтобы расширить ответ @ Marcus, вы должны использовать:

function generateSecureRandomNumber($digits): int {
   return random_int(pow(10, $digits - 1), pow(10, $digits) - 1);
}

function generateSecureRandomNumberWithPadding($digits): string {
   $randomNumber = random_int(0, pow(10, $digits) - 1);
   return str_pad($randomNumber, $digits, '0', STR_PAD_LEFT);
}

Обратите внимание, что использование rand() хорошо, если вам не нужно безопасное случайное число.

0 голосов
/ 29 июля 2018

Эта функция отлично работает без повторов и требуемого количества цифр.

$digits = '';
function randomDigits($length){
    $numbers = range(0,9);
    shuffle($numbers);
    for($i = 0; $i < $length; $i++){
        global $digits;
        $digits .= $numbers[$i];
    }
    return $digits;
}

Вы можете вызвать функцию и передать число цифр, например:

randomDigits(4);

результаты выборки:

4957 8710 6730 6082 2987 2041 6721

Оригинальный сценарий, полученный от этой сущности

0 голосов
/ 03 апреля 2014

вы, люди, действительно любите усложнять вещи:)

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

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

например,

$x = "102384129" . complex_3_digit_random_string();

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

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

готово.

0 голосов
/ 18 декабря 2014

этот простой скрипт сделает

$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;
0 голосов
/ 18 февраля 2017
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;
    // -------------------------------------------------------------------

}
...