Génération aléatoire multiple

Grafen Walder
Invité n'ayant pas de compte PHPfrance

19 oct. 2007, 14:05

Bonjour,

avec ce bout de code, je génère 1 code de 8 chiffres et lettres :
$alea="aA1bB1cC2dD3eE4fF5gG6hH7iI8jJ9kK0lLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
$code="net";
while(strlen($code)!=8) {
     $code.=$alea[rand(0,61)];
Ce que je voudrait, c'est créer plusieurs code en même temps et pas seulement 1 par 1 car je me suis retrouvé à en générer 127 hier et c'est franchement pas terrible de les faire 1 par 1, c'est long...

Quelqu'un peut t'il me dire ce que je doit rajouter dans ce code ?

Merci de votre aide si précieuse :wink:

ViPHP
ViPHP | 4039 Messages

19 oct. 2007, 14:08

Ben, si tu mettais 8 rand() l'un à la suite de l'autre, une fois ? mais ça ne changera pas la vitesse d'éxécution, puisque le nombre d'opérations à faire reste identique.

Sinon, c'est mieux d'utiliser mt_rand() , il génère de "meilleurs" résultats, et plus rapidement si je ne me trompe.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Grafen Walder
Invité n'ayant pas de compte PHPfrance

19 oct. 2007, 14:30

Merci de ta réponse mais je ne comprend pas celle ci :(

le bout de code que j'ai montrer plus haut créer 1 seul code de 8 caractères (chiffre et lettre majuscule - minuscule) !

Je créer un formulaire de type <option>..etc... je sélectionne le nombre de code que je souhaite et je valide, puis la variable $nombre est transmise à ce code php pour me sortir le nombre de code que je désire .

Mais comment faire ? quoi rajouter ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 oct. 2007, 15:03

Il n'y a hélas pas grand chose de plus à faire... ce que tu peux essayer et qui ira peut être plus vite (à tester), c'est d'utiliser la fonction str_shuffle() sur ta chaine $alea pour mélanger les caractères à chaque fois et toujours prendre les 5 premiers (plus les 3 de "net" pour faire 8).

Ca t'évite ainsi des boucles pour chaque caractère, ainsi que des redondances dans le mot de passe généré...

Par ailleurs, personnellement je retirerais les caractères pouvant préter à confusion dans les mots de passe (les o et zéros ; les un, i et L, etc. ) ca évite quand tu reçois un mot de passe du genre "0O1liI" de s'arracher les cheveux à trouver quel caractère correspond à quoi ;) (à noter d'ailleurs que tu as deux fois le 1 dans ta chaine ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 oct. 2007, 15:05

tordu la demande... pas claire du moins :-k
mais c'est à toi de voir ce que tu en feras
$alea="aA1bB1cC2dD3eE4fF5gG6hH7iI8jJ9kK0lLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";

$nb = isset($_POST["nb_code"]) ? $_POST["nb_code"] : 1;
$codes = array();
for($i = 0; $i <$nb; $i++)
{
  $code="net";
  while(strlen($code)!=8) {
       $code.=$alea[rand(0,61)];
  $codes[] = $code; 
}

// test d'affichage
var_dump($codes);

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 4039 Messages

19 oct. 2007, 15:50

ouaip.

Mais utiliser plutôt mt_rand() que rand(). (4 fois plus rapide, et "plus" aléatoire)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 2144 Messages

19 oct. 2007, 16:02

J'ai l'impression que ce qu'il fait pour le moment, c'est lancer le script une fois par mots de passe à générer et qu'il voudrait générer une liste en une seule fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 oct. 2007, 16:14

Ben la solution c'est celle qu'à proposé Truc dans ce cas, et dans laquelle on peut remplacer le rand() par un mt_rand() comme suggéré par Berzemus :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...