web-dev-qa-db-ja.com

PHPランダムx桁数

X桁の乱数を作成する必要があります。

したがって、xが5であるとしましょう。たとえば、数字が必要です。 35562 xが3の場合、次のようなものが返されます。 463

誰かがこれがどのように行われるかを教えてもらえますか?

55
user1022585

Rand()pow() と組み合わせて使用​​すると、これを実現できます。

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

これは、100から999の間の数値を出力します。これは、10 ^ 2 = 100および10 ^ 3 = 1000であり、1で減算して必要な範囲に入れるためです。

005も有効な例である場合、次のコードを使用して先頭にゼロを追加します。

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

私は通常Rand()http://php.net/manual/en/function.Rand.php を使用します

例えば.

Rand ( 10000 , 99999 );

5桁の乱数用

22
Code Magician

その正確な目的のために Rand($min, $max) を使用できます。

値をx桁の値に制限するには、次を使用できます。

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

ループや手間をかけずに、文字、数字、または特別な記号を使用してランダムな文字列を作成できる簡単なソリューションを次に示します。

$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
_
10
Akshay Khale

数字を数字のリストとして扱い、毎回ランダムな数字を追加するだけです。

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);
}
8
Blender
function random_numbers($digits) {
    $min = pow(10, $digits - 1);
    $max = pow(10, $digits) - 1;
    return mt_Rand($min, $max);
}

テスト済み ここ

7
animuson

私が考えることができる最も簡単な方法は、str_padRand関数を使用することです

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

上記の例では、範囲から999の乱数を生成します。

5桁。

6
AMB

Rand(1000, 9999);はx4回よりも高速に動作しますRand(0,9);

基準:

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

結果をより明確にするために、両方の関数が100000回の反復で実行されていました

6
Alex

ループでそれを行う:

function randomWithLength($length){

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

    return (int)$number;

}
3
Rene Pot

Randまたはmt_Rand しましょう...

使用法:

Rand(min, max);

mt_Rand(min, max);
3
easyb
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;  
}
2
philip mudenyo

さて、4桁の乱数を生成できるシンプルなPHP関数mt_Rand(2000,9000)として使用できます

mt_Rand(2000,9000) 
1
Anoop P S
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;
    // -------------------------------------------------------------------

}
0
Srx

これは、N桁の乱数を生成する別の簡単なソリューションです。

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

ここで確認してください: http://codepad.org/pyVvNiof

0
MRodrigues

mt_Rand()関数を使用して任意のx桁の乱数を生成できます。 mt_Rand()は、Rand()関数の構文ではるかに高速です:mt_Rand()またはmt_Rand($min , $max)

続きを読む

例:<?php echo mt_Rand(); ?>

0
Himanshu Singh

このシンプルなスクリプトは

$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
Susantha7

この機能は、繰り返しがなく、必要な桁数で完全に機能します。

$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

this Gist から取得した元のスクリプト

0
Reegan Ochora

ドキュメントによると、Rand()は暗号的に安全な値を生成しないことに注意してください。

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

この関数は暗号的に安全な値を生成しないため、暗号化の目的には使用しないでください。暗号的に安全な値が必要な場合は、代わりにrandom_int()、random_bytes()、またはopenssl_random_pseudo_bytes()の使用を検討してください。

代わりに、PHP 7で利用可能なrandom_int()を使用することをお勧めします(参照: 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
Yahya Uddin