Mot de passe

evad
Invité n'ayant pas de compte PHPfrance

25 juin 2007, 11:32

Bonjour,

J'aimerais un script qui génère un mot de passe aléatoire de 8 caractères avec 6 minuscules, 1 majuscule et 1 chiffre.

Je n'ai rien trouvé sur les autres forums, quelqu'un peut m'aider ?

Merci

ev@d

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

25 juin 2007, 13:49

Si tu fais une petite recherche, tu verras qu'il y a déjà eu plusieurs topic sur la génération de mot de passe dans les pages du forum... mais si cela ne te suffisait pas tu peux toujours nous montrer ton code que l'on voit ce qui te manque ou ce qui ne fonctionne pas... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

evad
Invité n'ayant pas de compte PHPfrance

25 juin 2007, 16:12

J'ai vu qu'il y a des topics sur la génération de mots de passe mais ils ne correspondent pas à ce que je recherche.

Voici ce que j'ai pour l'instant :

Code : Tout sélectionner

<?php function generate_password($size) { $listeChar = '23456789abcdefghkpqrstwxyzABCDEFGHKJLMNPQRSTUVWXYZ'; $max = strlen($listeChar)-1; $key = ''; for ($i=0;$i<$size;$i++) { $key .= $listeChar[mt_rand(0,$max)]; } return $key; } echo generate_password(8); ?>
J'ai un mot de passe de 8 caractères qui est généré aléatoirement mais je voudrais qu'il soit obligatoirement composé de 6 minuscules, 1 majuscule et 1 chiffre (l'ordre des caractères n'a pas d'importance).

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

25 juin 2007, 16:42

Le plus simple pour éviter de t'embête avec des vérification serait selon moi de faire 3 chaines : nombre, minuscules, majuscules et de récupérer dans chaque, 1, 6 et 1 caractères. Ainsi tu es sur d'avoir ton format. :)
Quant à l'ordre, tu peux par exemple les coller dans un tableau et utiliser la fonction shuffle() pour les mélanger :
$listeNb = '23456789';
$listeMin = 'abcdefghkpqrstwxyz';
$listeMaj = 'ABCDEFGHKJLMNPQRSTUVWXYZ'; 

$tab = array();
$tab[] = $listeNb[mt_rand(0, strlen($listeNb)-1)]; // 1 chiffre
$tab[] = $listeMaj[mt_rand(0, strlen($listeMaj)-1)]; // 1 majuscule
for ($i=0;$i<6;$i++) { // 6 minuscules
  $tab[] = $listeMin[mt_rand(0, strlen($listeMin)-1)];
} 

shuffle($tab); // mélange les lettres

return implode('', $tab);
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 693 Messages

25 juin 2007, 17:08

Manque le 1 dans la liste des chiffre :P

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

25 juin 2007, 17:27

Il ne manque pas, il a été volontairement retiré par ev@d, tout comme le L minuscule, le i le O et le zéro.. :)

Cela évite les risques de confusion quand tu génères un mot de passe que tu dois ensuite donner à quelqu'un : tu es sur qu'il ne t'appellera pas pour savoir si c'est un 1, un I ou l ;) (et quand tu as un nombre important d'utilisateurs, moins y en a qui t'appellent pour des broutilles, mieux tu te porte ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...