php随机x位数

use*_*585 60 php random numbers

我需要创建一个x位数的随机数.

所以假设x是5,我需要一个数字例如.35562如果x是3,那么它会抛出类似的东西; 463

有人能告诉我这是怎么做到的吗?

Mar*_*cus 131

您可以rand()一起使用pow()来实现这一目标:

$digits = 3;
echo rand(pow(10, $digits-1), pow(10, $digits)-1);
Run Code Online (Sandbox Code Playgroud)

这将输出一个介于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);
Run Code Online (Sandbox Code Playgroud)

  • 更简洁的方式: $digits = 3; echo random_int( 10 ** ( $digits - 1 ), ( 10 ** $digits ) - 1); (2认同)
  • 我决定用实际答案对 @Mr.Jo 的评论进行基准测试,以下是基于总执行时间(以纳秒为单位)的结果: 5 Number=> marcusVersion(): 36,916 ns; mrJoVersion():27,769 纳秒 10 Number=> marcusVersion():11,116 纳秒;mrJoVersion():41,748 纳秒 15 Number=> marcusVersion():17,543 纳秒;mrJoVersion(): 60,442 ns 20 Number=> marcusVersion(): 20,373 ns; mrJoVersion(): 77,534 ns 您的选择应取决于您一次生成的数字数量 (2认同)

Cod*_*ian 23

我通常只使用RAND() http://php.net/manual/en/function.rand.php

例如

rand ( 10000 , 99999 );
Run Code Online (Sandbox Code Playgroud)

为您的5位数随机数


hal*_*dan 13

你可以rand($min, $max)用于这个目的.

为了将值限制为x位数值,您可以使用以下内容:

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


Aks*_*ale 12

这是一个简单的解决方案,没有任何循环或任何麻烦,这将允许您创建带有字符,数字甚至特殊符号的随机字符串.

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

哪里$x可以是位数

例如. substr(str_shuffle("0123456789"), 0, 5);

几次执行后的结果

98450
79324
23017
04317
26479
Run Code Online (Sandbox Code Playgroud)

您也可以使用相同的代码生成随机字符串,就像这样

$randomNum=substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyzABCDEFGHIJKLMNOPQRSTVWXYZ"), 0, $x);
Run Code Online (Sandbox Code Playgroud)

结果用 $x = 11

FgHmqpTR3Ox
O9BsNgcPJDb
1v8Aw5b6H7f
haH40dmAxZf
0EpvHL5lTKr
Run Code Online (Sandbox Code Playgroud)

  • 好吧,改组似乎是个好主意,但它不会生成重复的数字/字符,例如 2312、abcb 等... (2认同)

Ble*_*der 8

将您的号码视为数字列表,每次只需附加一个随机数字:

function n_digit_random($digits) {
  $temp = "";

  for ($i = 0; $i < $digits; $i++) {
    $temp .= rand(0, 9);
  }

  return (int)$temp;
}
Run Code Online (Sandbox Code Playgroud)

或者纯粹的数值解决方案:

function n_digit_random($digits)
  return rand(pow(10, $digits - 1) - 1, pow(10, $digits) - 1);
}
Run Code Online (Sandbox Code Playgroud)


ani*_*son 7

function random_numbers($digits) {
    $min = pow(10, $digits - 1);
    $max = pow(10, $digits) - 1;
    return mt_rand($min, $max);
}
Run Code Online (Sandbox Code Playgroud)

在这里测试.


AMB*_*AMB 6

我能想到的最简单的方法就是使用rand函数str_pad

<?php
echo str_pad(rand(0,999), 5, "0", STR_PAD_LEFT);
?>
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,它将生成0到999范围内的随机数.

并有5位数.


Ale*_*lex 6

rand(1000, 9999); 工作速度比x4倍快 rand(0,9);

风向标:

rand(1000, 9999)      : 0.147 sec.
rand(0,9)x4 times     : 0.547 sec.
Run Code Online (Sandbox Code Playgroud)

这两个函数都在100000次迭代中运行,以使结果更加明确

  • OP正在要求一种创建带有x位数字的随机数的方法。也许您可以编辑答案以匹配问题? (2认同)

Ano*_*P S 5

那么你可以使用简单的 php 函数 mt_rand(2000,9000) 它可以生成一个 4 位随机数

mt_rand(2000,9000) 
Run Code Online (Sandbox Code Playgroud)