Page 1 sur 1
Génération aléatoire multiple
Posté : 19 oct. 2007, 14:05
par Grafen Walder
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

Posté : 19 oct. 2007, 14:08
par Berzemus
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.
Posté : 19 oct. 2007, 14:30
par Grafen Walder
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 ?
Posté : 19 oct. 2007, 15:03
par Ryle
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

)
Posté : 19 oct. 2007, 15:05
par Truc
tordu la demande... pas claire du moins

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);
Posté : 19 oct. 2007, 15:50
par Berzemus
ouaip.
Mais utiliser plutôt mt_rand() que rand(). (4 fois plus rapide, et "plus" aléatoire)
Posté : 19 oct. 2007, 16:02
par iclo
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.
Posté : 19 oct. 2007, 16:14
par Ryle
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 