ratibus | [quote=988552,80,25,66432]Pour ceux qui captent pas l'anglais: création plus ou moins aléatoire d'un mot de passe de 16 caractères, en veillant à une répartition entre lettres minuscules, majuscules, chiffres, et symboles. En veillant au passage à ce que chaque caractère soit employé une seule fois. Je compte intégrer cette procédure à mon forum.
J'ai bon? Ya sûrement moyen d'optimiser [/quote]
Salut
Je me suis permis de réécrire ta fonction :
Code :
- function generatePwd() {
- // Generates a so-called random password:
- /* Rules:
- Password is sixteen characters long;
- two or three capital letters
- one or two symbols
- two or three digits
- other characters are lowercase letters
- */
- $chars = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
- $majChars = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
- $digits = array(0,1,2,3,4,5,6,7,8,9);
- $symbols = array();
- for($i=33; $i<48; $i++) {
- $symbols[] = chr($i);
- }
- // Password creation
- $lMaj = mt_rand(2, 3);
- $lSym = mt_rand(1, 2);
- $lDig = mt_rand(2, 3);
- $lChars = 16-$lMaj-$lSym-$lDig;
- $chosen = array();
- // get uppercase letters
- shuffle($majChars);
- $chosen = array_merge($chosen, array_slice($majChars, 0, $lMaj));
- // get numbers
- shuffle($digits);
- $chosen = array_merge($chosen, array_slice($digits, 0, $lDig));
- // get symbols
- shuffle($symbols);
- $chosen = array_merge($chosen, array_slice($symbols, 0, $lSym));
- // get lowercase letters
- shuffle($chars);
- $chosen = array_merge($chosen, array_slice($chars, 0, $lChars));
- // reorder digits randomly
- shuffle($chosen);
- return implode('', $chosen);
- }
|
J'ai fait quelques tests, elle est environ 6-7 fois plus rapide |