我需要创建一个有x位数字的随机数。
比如,如果x是5,我需要一个类似35562的数字。 如果x是3,则会返回类似463的数字。
有人能向我展示如何做到这一点吗?
比如,如果x是5,我需要一个类似35562的数字。 如果x是3,则会返回类似463的数字。
有人能向我展示如何做到这一点吗?
使用循环来完成:
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);
function get_sms_token($length = 4) {
return rand(
((int) str_pad(1, $length, 0, STR_PAD_RIGHT)),
((int) str_pad(9, $length, 9, STR_PAD_RIGHT))
);
}
echo get_sms_token(6);
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;
}
echo sprintf( "%04d", rand(0,9999));
echo sprintf()
是一种“反模式”。绝对没有任何理由让任何人编写echo sprintf()
- 每次都应该是没有echo
的printf()
。这个答案并不适合满足提问者的动态需求。 - mickmackusa$number_of_digits = 10;
echo substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);
请在此处查看:http://codepad.org/pyVvNiof
这个函数完美地工作,没有重复的数字,并且指定了所需的位数。
$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获取的原始脚本。
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()
是可以的。这个简单的脚本就可以了
$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;
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;
// -------------------------------------------------------------------
}
x
位数字的随机数;您能否调整您的答案,提供如何使用rand
或mt_rand
来实现这一点的示例? - user212218