Inicio Apuntes FPApuntes DAW Generar números aleatorios sin repeticiones con PHP

Generar números aleatorios sin repeticiones con PHP

Publicado por entreunosyceros
Publicado el: Última actualización:

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

Una vez más aquí. En esta ocasión vengo a dejar un pequeño programa que acabo de escribir dado que por el momento solo soy rico en proteínas y calcio. Con este código vamos a generar dos grupos de números, totalmente aleatorios. El primero de ellos va a generar cinco números del 1 al 50 y el segundo va a generar dos números del 1 al 12. Todos ellos se van a presentar en pantalla sin que se repitan. Además los vamos a ordenar de menor a mayor utilizando el método burbuja.

Estas combinaciones de números son las mismas que se pueden utilizar en el sorteo del Euromillón. Ese sorteo que se celebra en toda Europa y que tiene unos premios muy jugosos. Muchos entendidos dicen que para jugar a esto lo importante es hacerlo siempre a los mismos números, pero como en mi caso no tengo unos números de la suerte, ni nada parecido a los que jugar, prefiero hacerlo de forma aleatoria.

Genera números aleatorios con PHP

Por este motivo hace como un rato que me puse a escribir un poco de PHP, por aquello de que no se oxide, y el código resultante ha dado el siguiente pequeño programa que se puede ver funcionando en el siguiente enlace.

Código para generar números aleatorios con PHP

El código del programa que se puede ver en el anterior enlace aquí queda, por si a alguien le sirve de algo.

<?php
# definimos las 5 variables que contendrán los 5 números
$n1=$n2=$n3=$n4=$n5=0;
# definimos las 2 variables que van a contener las 2 estrellas
 $e1=$e2=0;

# buscamos 5 números aleatorios, verificando que no se repitan
$pos=1;
while(1){
	$rand=rand(1,50);
	$repetido=false;
	for($i=1;$i<=$pos;$i++)	{
		if(${"n".$i}==$rand){
			$repetido=true;
		}
	}

	if($repetido==false)	{
		${"n".$pos}=$rand;
		$pos++;
		if($pos==6){
			break;
		}
	}
}

# buscamos 2 números aleatorios para las estrellas, verificando que no se repitan
$pos=1;
while(1){
	$rand=rand(1,12);
	$repetido=false;
	for($i=1;$i<=$pos;$i++)	{
		if(${"e".$i}==$rand){
			$repetido=true;
		}
	}

	if($repetido==false)	{
		${"e".$pos}=$rand;
		$pos++;
		if($pos==3){
			break;
		}
	}
}
 

# ordenamos las 5 variables con el método burbuja
for($i=1;$i<=5;$i++){
    for($j=1;$j<=5-$i;$j++){
       if(${"n".$j} && ${"n".($j+1)} && ${"n".$j}>${"n".($j+1)}){
            $k=${"n".($j+1)};
            ${"n".($j+1)}=${"n".$j};
            ${"n".$j}=$k;
        }
    }
}

# ordenamos las 2 variables de las estrellas con el método burbuja
for($i=1;$i<=2;$i++){
    for($s=1;$s<=2-$i;$s++){
       if(${"e".$s} && ${"e".($s+1)} && ${"e".$s}>${"e".($s+1)}){
            $l=${"e".($s+1)};
            ${"e".($s+1)}=${"e".$s};
            ${"e".$s}=$l;
        }
    }
}
 
# mostramos el resultado de los números
for($i=1;$i<=5;$i++)
{
	if($i==1){
		echo "<strong>Números:</strong> ";
	}
	echo ${"n".$i};
	if ($i<5){
		echo " - ";
	}
}
echo "<p>";
# mostramos el resultado de las estrellas
for($i=1;$i<=2;$i++)
{
	if($i==1){
		echo "<strong>Estrellas:</strong> ";
	}
	echo ${"e".$i};
	if ($i<2){
		echo " - ";
	}
}
echo "</p>";
?>

<p><input type="button" value="Generar números" onclick="location.reload()"/></p>

Bueno, el caso es que el código anterior es todo PHP que genera los números con la función rand(), y el botón para recargar la página con JavaScript. No tiene mucho más que explicar. Posiblemente esta no sea la forma más elegante de generar números aleatorios, pero funciona

Ahora a ver si esto vale de algo y alguien se vuelve asquerosamente rico gracias a esto.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.