Page 1 sur 1

Générateur de mot de passe

Posté : 01 mars 2010, 13:25
par sylvaing26
Bonjour à tous,
j'ai ce générateur de mot de passe, que j'ai configuré pour avoir 6 caracteres après user_
J'ai remarqué que de temps en temps, il me sort que 5 caractères .... je ne comprend pas trop pourquoi

Merci beaucoup de m'aider à eclairer ma lanterne :lol:
function genereCode($x){
   $caracteresValides = "abcdefghijklmnopqrstuvwxyz0123456789";
   $password = "user_";
   mt_srand((double) microtime() * 1000000);
   for ($i=0;$i<$x;$i++){
      $password .= substr($caracteresValides, mt_rand(0,strlen($caracteresValides)), 1);
   }
   return $password;
}
$identifiant = genereCode(6);


Re: Générateur de mot de passe

Posté : 01 mars 2010, 14:03
par ouckileou
J'ai décomposé ton code et réduit la chaîne, tu devrais voir d'où vient le problème :
<?php
function genereCode($x){
   $caracteresValides = "abc";
   $password = "user_";
   
   mt_srand((double) microtime() * 1000000);
   for ($i=0;$i<$x;$i++){
	  $rand = mt_rand(0,strlen($caracteresValides));
	  echo '<br />';
	  echo 'nb aléatoire : '.$rand.'<br />';
	  echo 'correspond à la lettre : '.substr($caracteresValides, $rand, 1).'<br />';
      $password .= substr($caracteresValides, $rand, 1);
   }
   return $password;
}
$identifiant = genereCode(6);
?>
Remarques :
mt_srand() ne sert à rien au dessus de PHP 4.2.0 :
Note: Depuis PHP 4.2.0, vous n'avez plus besoin d'initialiser le générateur de nombres aléatoires avec srand() ou mt_srand() car c'est fait automatiquement.
Ta chaîne de caractères valides ne bouge pas, pourquoi recalculer la longueur avec strlen() à chaque tour de boucle ?

Re: Générateur de mot de passe

Posté : 01 mars 2010, 16:39
par sylvaing26
A ok en effet je viens de cerner le problème, j'y avais pensé en + mais je voyait pas ou ca pouvait clocher

Donc après correction ca c'est bon ?
function genereCode($x){
   $caracteresValides = "abc";
   $password = "user_";
   
   mt_srand((double) microtime() * 1000000);
   for ($i=0;$i<$x;$i++){
          $nb = strlen($caracteresValides) - 1;
          $rand = mt_rand(0,$nb);
          echo '<br />';
          echo 'nb aléatoire : '.$rand.'<br />';
          echo 'correspond à la lettre : '.substr($caracteresValides, $rand, 1).'<br />';
      $password .= substr($caracteresValides, $rand, 1);
   }
   return $password;
}
$identifiant = genereCode(6);


Re: Générateur de mot de passe

Posté : 01 mars 2010, 16:42
par ouckileou
Yes ça me paraît bien :)

Re: Générateur de mot de passe

Posté : 01 mars 2010, 17:15
par sylvaing26
Yes ça me paraît bien :)
:lol: Merci beaucoup
C'est tout bête mais defois un oeil exterieur est de bonne aide !