str_random number mt_rand float array php random numbers

number - php número de dígito aleatorio x



random number php no repeat (15)

Necesito crear un número al azar con x cantidad de dígitos.

Digamos que x es 5, necesito un número para ser, por ej. 35562 Si x es 3, arrojaría algo así como; 463

¿Podría alguien mostrarme cómo se hace esto?


Aquí hay una solución simple sin bucles ni problemas que le permitirá crear cadenas aleatorias con caracteres, números o incluso con símbolos especiales.

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

donde $x puede ser una cantidad de dígitos

P.ej. substr(str_shuffle("0123456789"), 0, 5);

Resultados después de un par de ejecuciones

98450 79324 23017 04317 26479

Puedes usar el mismo código para generar cadenas aleatorias también, como esta

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

Resultados con $x = 11

FgHmqpTR3Ox O9BsNgcPJDb 1v8Aw5b6H7f haH40dmAxZf 0EpvHL5lTKr


Esta es otra solución simple para generar números aleatorios de N dígitos:

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

Verifíquelo aquí: http://codepad.org/pyVvNiof


Puede usar rand($min, $max) para ese propósito exacto.

Para limitar los valores a valores con x dígitos, puede usar lo siguiente:

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


Trate su número como una lista de dígitos y añada un dígito al azar cada vez:

function n_digit_random($digits) { $temp = ""; for ($i = 0; $i < $digits; $i++) { $temp .= rand(0, 9); } return (int)$temp; }

O una solución puramente numérica:

function n_digit_random($digits) return rand(pow(10, $digits - 1) - 1, pow(10, $digits) - 1); }


a tu gente realmente le gusta complicar las cosas :)

el verdadero problema es que el OP quiere, probablemente, agregar eso al final de un número realmente grande. si no, no hay necesidad de que pueda ser requerido. como ceros a la izquierda en cualquier número es simplemente, bueno, dejó ceros.

entonces, solo agregue la porción más grande de ese número como una suma matemática, no como una cadena.

p.ej

$x = "102384129" . complex_3_digit_random_string();

simplemente se convierte

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

hecho.


este simple script hará

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


hazlo con un bucle:

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


la forma más simple que puedo pensar es usando la función rand con str_pad

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

En el ejemplo anterior, generará un número aleatorio en el rango de 0 a 999 .

Y teniendo 5 dígitos.


RAND() usar RAND() rand()

p.ej

rand ( 10000 , 99999 );

para su número aleatorio de 5 dígitos


rand(1000, 9999); funciona más rápido que x4 veces rand(0,9);

punto de referencia:

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

Ambas funciones se ejecutaban en 100000 iteraciones para que los resultados fueran más explícitos


rand o mt_rand va a hacer ...

uso:

rand(min, max); mt_rand(min, max);


Puede usar rand() junto con pow() para que esto suceda:

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

Esto dará como resultado un número entre 100 y 999. Esto porque 10 ^ 2 = 100 y 10 ^ 3 = 1000 y luego necesita restarlo con uno para obtenerlo en el rango deseado.

Si 005 también es un ejemplo válido, usaría el siguiente código para rellenarlo con ceros a la izquierda:

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


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; // ------------------------------------------------------------------- }


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; }


function random_numbers($digits) { $min = pow(10, $digits - 1); $max = pow(10, $digits) - 1; return mt_rand($min, $max); }

Probado here .