Fonction PHP : nombre_alea()
Ici, vous pouvez voir (et copier/coller) le code complet de la fonction PHP nombre_alea(). N'hésitez pas voter pour cette fonction si elle vous plaît ou si vous vouv en servez !
nombre_alea() ajouté le 2009-07-07 01:35:07 par Florent
function nombre_alea(){
$nombre_chiffre = 6;
for ($i=0, $nombre =""; $i < $nombre_chiffre; $i++)
$nombre .= mt_rand(0, 9);
echo $nombre;
}
Cette fonction permet de générer un nombre aléatoire. On peut définir nombre_chiffre selon l'utilité que l'on veut en faire. Ici j'ai mis 6 pour par exemple avoir un code anti-bot qui se génère. On pourrais faire plus simple, utiliser la fonction mt_rand() directement mais si on à 00876 alors on récupérera 876, donc pour un contrôle anti-bot ce n'est pas correct.
Commentaires sur la fonctions php
Adrian 09/07/2009 à 19:25
Et pourquoi ne pas utiliser les paramètres pour fixer $nombre_chiffre ? Pourquoi faire echo au lieu de return ?
Florent 09/07/2009 à 20:56
J'ai mis echo et non return car après il faut faire echo nombre_alea(); au lieu de nombre_alea();
Mais voila qui est modifié quand même ;)
function nombre_alea($nombre_chiffre){
for ($i=0, $nombre =""; $i < $nombre_chiffre; $i++)
$nombre .= mt_rand(0, 9);
return $nombre;
} Guile 11/07/2009 à 15:26
Bon, simple à lire et à comprendre.
Néanmoins, il y avait largement de quoi faire plus rapide.
Je propose donc nombre_alea2 qui, pour renvoyer une série de chiffre d'une longueur max de 9 digits est presque 4 fois plus rapide que la fonction proposée, et nombre_alea3 qui, pour renvoyer une série de chiffre d'une longueur de 10 digits ou plus est plus rapide que nombre_alea.
Certes, nombre_alea3 est moins aisée à lire et comprendre, mais pour une suite de 300 digits, nombre_alea fait 300 itérations simples, là où nombre_alea3 fait 30 itérations un peu complexes.
// Pour des nombres de 0 à 9 digits
function nombre_alea2($p_nbDigits) {
return mt_rand(pow(10, $p_nbDigits - 1), pow(10, $p_nbDigits) - 1);
}
// Pour des nombres de plus de 9 digits
function nombre_alea3($p_nbDigits) {
$result = '';
$nb_to_generate = 0;
do
{
$p_nbDigits -= $nb_to_generate;
$nb_to_generate = min(9, $p_nbDigits);
$result .= mt_rand(pow(10, $nb_to_generate - 1), pow(10, $nb_to_generate) - 1);
}
while ($p_nbDigits > 9);
return $result;
} Guile 11/07/2009 à 15:42
Allez zou, je continue mon petit truc avec nombre_alea4, qui permet de gagner encore des petits centièmes de millisecondes par-ci par-là. Elle utilise deux variables globales (globales car fait gagner 10% de performances par rapport à la même fonction contenant leurs déclarations), et permet ainsi d'être 20% plus rapide par rapport à nombre_alea3 et 60% plus rapide par rapport à nombre_alea, sur une série de 300 digits.
function nombre_alea4($p_nbDigits) {
$nb_to_generate = 0;
do
{
$p_nbDigits -= $nb_to_generate;
$nb_to_generate = min(9, $p_nbDigits);
$result .= mt_rand($tabMin[$nb_to_generate], $tabMax[$nb_to_generate]);
}
while ($p_nbDigits > 9);
return $result;
} guile 11/07/2009 à 15:43
Arf! J'avais oublié de mettre les 2 variables...
$tabMin = array(0, 0, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000);
$tabMax = array(0, 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999);
function nombre_alea4($p_nbDigits) {
$nb_to_generate = 0;
do
{
$p_nbDigits -= $nb_to_generate;
$nb_to_generate = min(9, $p_nbDigits);
$result .= mt_rand($tabMin[$nb_to_generate], $tabMax[$nb_to_generate]);
}
while ($p_nbDigits > 9);
return $result;
}
bat888 07/07/2009 à 08:46
mt_rand() suffi amplement combiné avec un str_pad() !