repetir rand numero number mt_rand generar digitos cadena aleatorio aleatoria php random numbers hex

numero - rand() php



mt_rand() me da siempre el mismo nĂºmero (1)

Tu problema es que siempre terminas con un valor flotante en tu variable $hex . Y la función mt_srand() como también se puede ver en el manual :

void mt_srand ([ int $ seed])

Espera un entero. Entonces, lo que hace es simplemente tratar de convertir su valor flotante a un número entero. Pero dado que esto falla, siempre devolverá 0.

Así que al final siempre terminas con la semilla 0 y luego también con el mismo número "aleatorio".

Puedes ver esto si lo haces:

var_dump($hex);

salida:

float(1.0908183557664E+77)

Y si luego quieres ver en qué número entero terminará si se convierte, puedes usar esto:

var_dump((int)$hex);

Y verá que siempre será 0.

Además, si está interesado, por qué su número termina siendo flotante, es simplemente por el desbordamiento del número entero, ya que su número es demasiado grande y corresponde al manual :

Si PHP encuentra un número más allá de los límites del tipo entero , se interpretará como un flotante . Además, una operación que da como resultado un número más allá de los límites del tipo entero devolverá una flotación en su lugar.

Y si lo haces:

echo PHP_INT_MAX;

Obtendrás el valor máximo de int, que será:

28192147483647 //32 bit 9223372036854775807 //64 bit

EDITAR:

Entonces, ¿cómo solucionar este problema y aún así asegurarse de obtener un número aleatorio?

Bueno, la primera idea podría ser simplemente verificar si el valor es mayor que PHP_INT_MAX y, en caso afirmativo, configurarlo en algún otro número. Pero supongo que parece que siempre tendrás un número hexadecimal tan grande.

Así que te recomendaría algo como esto:

$arr = str_split($hex); shuffle($arr); $hex = implode("", array_slice($arr, 0, 7));

Aquí simplemente str_split() tu número en una matriz con str_split() , luego shuffle() la matriz y luego implode() los primeros 7 elementos de la matriz que obtengo con array_slice() .

Después de haber hecho esto, puede usarlo con hexdec() y luego usarlo en mt_srand() .

Además, ¿por qué solo obtengo los primeros 7 elementos? Simplemente porque entonces puedo asegurarme de no golpear el valor de PHP_INT_MAX.

Tengo un problema con esta función siempre mi mt_rand() me da el mismo número:

$hex = ''f12a218a7dd76fb5924f5deb1ef75a889eba4724e55e6568cf30be634706bd4c''; // i edit this string for each request $hex = hexdec($hex); mt_srand($hex); $hex = sprintf("%04d", mt_rand(''0'',''9999''));

$hex siempre cambia, pero el resultado es siempre el mismo 4488 .

Editar

$hex = str_split($hex); $hex = implode("", array_slice($hex, 0, 7)); mt_srand($hex); $number = sprintf("%04d", mt_rand(''0'',''9999''));

http://php.net/manual/en/function.mt-srand.php