233 votes

Générer un mot de passe aléatoire en php

J'essaie de générer un mot de passe aléatoire en php.

Cependant, je reçois tous les 'a' et le type de retour est du type tableau et j'aimerais qu'il soit une chaîne. Des idées sur la façon de corriger le code?

Merci.

 function randomPassword() {
    $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
    for ($i = 0; $i < 8; $i++) {
        $n = rand(0, count($alphabet)-1);
        $pass[$i] = $alphabet[$n];
    }
    return $pass;
}
 

308voto

Neal Points 68710

Essayez ceci (utilisez strlen au lieu de count , car count sur une chaîne est toujours 1 ):

 function randomPassword() {
    $alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
    $pass = array(); //remember to declare $pass as an array
    $alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
    for ($i = 0; $i < 8; $i++) {
        $n = rand(0, $alphaLength);
        $pass[] = $alphabet[$n];
    }
    return implode($pass); //turn the array into a string
}
 

Démo: http://codepad.org/UL8k4aYK

127voto

user3260409 Points 31

Je sais que vous essayez de générer le mot de passe d'une manière spécifique, mais vous pouvez jeter un oeil à cette méthode...

$bytes = openssl_random_pseudo_bytes(2);

$pwd = bin2hex($bytes);

Il est pris à partir de la php.net le site et il crée une chaîne de caractères qui est deux fois la longueur de la nombre de vous mettre dans le openssl_random_pseudo_bytes fonction. Ci-dessus, serait de créer un mot de passe de 4 caractères.

En bref...

$pwd = bin2hex(openssl_random_pseudo_bytes(4));

Serait de créer un mot de passe de 8 caractères de long.

Notez cependant que le mot de passe contient uniquement des chiffres de 0 à 9 et de petites capitalisations lettres a-f!

67voto

BSQ Points 423

Code minuscule avec 2 lignes.

démo: http://codepad.org/5rHMHwnH

 function rand_string( $length ) {

    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    return substr(str_shuffle($chars),0,$length);

}

echo rand_string(8);
 

Avec rand_string, vous pouvez définir combien de caractères seront créés.

53voto

PeeHaa Points 31941
function generate_password($length = 20){
  $chars =  'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.
            '0123456789``-=~!@#$%^&*()_+,./<>?;:[]{}\|';

  $str = '';
  $max = strlen($chars) - 1;

  for ($i=0; $i < $length; $i++)
    $str .= $chars[mt_rand(0, $max)];

  return $str;
}

32voto

la_chouette Points 488
En une phrase :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X