Números al azar

En la pega me pidieron algo especial…. para un sorteo necesitan seleccionar 7 números al azar, entre el 1 y el X.

Algo que no parecía muy difícil sino fuera por algunas condiciones especiales.

  • El sistema debe entregar los números de uno en uno, ya que puede existir la posibilidad que uno de esos números no se encuentre.
  • El sistema debe entregar entonces más de 7 números si lo requiere.
  • El sistema debe ser «configurado» con la cantidad final de números, para que no queden fuera o sobren números
  • Lo más importante…. el azar.

Entonces decidí por lo que mejor conozco, HTML + PHP

Primero, un formulario para poder ingresar el número máximo.

<form id="form1" name="form1" method="post" action="index.php">
<input type="hidden" name="minimo" id="minimo" value="1">
Participantes:
<input type="text" name="maximo" id="maximo" value="300">
<input type="hidden" name="cantidad" id="cantidad" value="1">
<input type="submit" name="button" id="button" value="Empezar sorteo">
</form>

Simplemente un formulario con un input donde ingresar el máximo. Dos input ocultos con el mínimo ya ingresado (1) y con la cantidad de números a entregar (1). Finalmente un botón para enviar la información. El formulario llama a la misma página, de esa manera ocuparemos solo un archivo para hacer todo.

El inicio de nuestro archivo debemos colocar (antes del formulario)

<?php
if(!$_POST)
{
?>

Lo que significa en simples palabras que sino hemos enviado el formulario aún nos muestre el formulario.

Y bajo el formulario

<?php
} else
{
$min = $_POST["minimo"];
$max = $_POST["maximo"];
$cant = $_POST["cantidad"];
$i = 1;
mt_srand(time());
while($i <= $cant)
{
$generado = mt_rand($min, $max);
echo "GANADOR: "; echo $generado;echo "<br>";
$i++;
}
?>

Si el formulario fue enviado, entonces asigno a las variables min, max, cant los valores enviados en el formulario. Luego a i le asigno uno (para el ciclo while) . Usamos la función mt_srand() para determinar la semilla para nuestra función, utilizando la función time(), este paso no es necesario con las versiones actuales de PHP pero no hace ningún daño.

Luego el ciclo While realizará todo lo que está dentro hasta que i sea menor o igual que cant, en este caso solo 1 vez. Asignamos a generado el número aleatorio que estará entre el min y max (sabemos que el min es 1 y el max es el valor que podemos modificar en el primer formulario)  con la funcion mt_rand() e imprimimos el valor de generado.

Por último y para este ejercicio en particular, agregué un nuevo formulario a continuación que simplemente tiene un botón para enviar nuevamente los valores ingresados al principio y que nos entregue un nuevo número aleatorio.

<form id="form1" name="form1" method="post" action="index.php">
<input type="hidden" name="minimo" id="minimo" value="1">
<input type="hidden" name="maximo" id="maximo"
value=<?php echo $max; ?>>
<input type="hidden" name="cantidad" id="cantidad" value="1">
<input type="submit" name="button" id="button" value="Siguiente premio!">
</form>
<?php
}
?>

La única diferencia con el formulario inicial es que el valor máximo lo envío oculto. Finalmente le damos un poco de estilo con bulma.io y lo dejamos en producción.

Espero les sirva, con simples modificaciones pueden ingresar el mínimo, el máximo y la cantidad de números que necesitan, puede ser todo de una sola vez.

 

 

Deja un comentario