Générateur de mots de passe

Générateur de mots de passe

Introduction

En PHP, nous sommes souvent invités à générer des codes quelconques de manière aléatoire. Ça peut être utile lorsqu'un membre perd son mot de passe ou encore lors de l'inscription afin de valider bref, trouvez-y l'utilité que vous voulez. Je vous montre ici comment créer un générateur de codes aléatoires contenant des lettres majuscules, des lettres minuscules ou encore des chiffres. N'hésitez pas à me poser toutes vos questions, si vous obtenez un quelconque problème dans la réalisation de notre générateur de mots de passe.

Les arrays

Comme dans tous les langages, PHP nous permet d'utiliser des arrays. Les arrays sont ni plus ni moins que des tableaux, pouvant contenir des informations quelconques. Pour créer un array, nous utilisons le mot réservé array et nous entrons des valeurs pour chaque case du tableau, séparés par des virgules. Un array peut contenir des chaînes de caractères ou encore des nombres.

Exemple :

<?php
$mon_array = array('chaine', 3, 'autrevaleur');
?>

Nous pourrions ajouter autant de valeur que nous le désirons, ça n'a aucune importance. Pour accéder à ces valeurs, nous utilisons le nom de l'array avec, entre crochets, le numéro de la case à laquelle nous voulons accéder. Notez bien que la numérotation des cases commence toujours à 0. Donc, si je veux accéder à la première case, je procède ainsi :

<?php
    $mon_array = array('chaine', 3, 'autrevaleur');
    echo $mon_array[0];
?>

Et j'obtiendrai comme résultat l'affichage de "chaine" sur ma page.

Il est possible de créer des associations afin d'accéder aux cases autrement que par des numéros à l'aide du symbole =>. Sur l'exemple qui suit, je créer une variable $config qui me permettra de me connecter à ma base de données :

<?php
    $config = array('host' => 'localhost', 'user' => 'alexbad', 'pass' => 'ale123', 'base' => 'lapage');
    //Et si je veux me connecter :
    $connect = mysql_connect($config['host'], $config['user'], $config['pass']);
    mysql_select_db($config['base']);
    mysql_close($connect);
?>

Il est aussi possible de faire des déclaration plus simples, sans utiliser la fonction array :

<?php
    $config = array(); //Je déclare mon tableau
    $config['host'] = 'localhost';
    $config['user'] = 'alexbad';
    $config['pass'] = 'ale123';
    $config['base'] = 'lapage';
?>

Ce qui donnera exactement le même résultat. Voilà, c'est suffisant pour les tableaux, voyons maintenant comment générer un nombre aléatoire.

Générer un nombre aléatoire

Pour générer un nombre aléatoire, nous devons utiliser la fonction rand(). Cette fonction requiert deux paramètres :

  • Le nombre de départ
  • Le nombre limite

Par exemple, si je veux générer un nombre aléatoire entre 98 et 504, je procède ainsi :

<?php
    $nombre_aleatoire = rand(98, 504); //Cette variable contient désormais un nombre 
                                                              // aléatoire entre 98 et 504, il sera différent à 
                                                              // chaque exécution du script
    //Et on peut l'afficher ;)
    echo $nombre_aleatoire;
?>

C'est aussi simple que ça pour les nombres aléatoires, voyons maintenant comment mettre en relation les arrays et la fonction rand() pour créer un générateur de mots de passe.

Générer un code aléatoire

Nous allons procéder simplement, nous créerons une fonction qui nécessitera un paramètre : le nombre de caractères du code à générer. Moi, j'appelle ma fonction "generer", vous pouvez faire comme vous voulez :

<?php
    function generer($longueur)
    {

    }
?>

Maintenant, nous allons créer une boucle qui générera aléatoirement un seul et unique caractère. Si notre boucle tourne 7 fois, nous aurons un code de 7 caractères aléatoires, simple non?

<?php
    function generer($longueur)
    {
        for ($i = 1; $i <= $longueur; $i++)
        {
        //On génère le code
        }
    }
?>

Notre code pourra contenir trois types de caractères :

  • Des lettres minuscules
  • Des lettres majuscules
  • Des chiffres

Pour les chiffres, c'est simple, nous utiliserons la fonction rand(). Par contre, pour les lettres, majuscules et minuscules, nous utiliserons des arrays. Dans ces arrays, nous stockerons toutes les lettres de l'alphabet.

Exemple :

<?php
    function generer($longueur)
    {
    $minuscules = 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');
    $majuscules = 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');
        for ($i = 1; $i <= $longueur; $i++)
        {
        //On génère le code
        }
    }
?>

Maintenant, à chaque tour de boucle, nous ajouterons un caractère à notre code et à la toute fin, lorsque la boucle est terminée, nous retournons le résultat.

Pour générer des lettres aléatoires, nous créerons un nombre aléatoire situé entre 0 et 25, puisque notre array commence à 0. Et nous accéderons à la case du tableau correspondante. Pour déterminer quel type de caractère nous devons générer, nous utiliserons un nombre aléatoire compris entre 0 et 2 inclusivement. Si c'est 0, c'est un chiffre, si c'est 1, c'est une lettre majuscule et finalement, si c'est 2, c'est une lettre minuscule. Pour tester le tout, j'utilise le branchement conditionnel switch(). Vous pouvez le faire très bien avec des if(), ça donne exactement le même résultat. Notez que sur l'exemple qui suit, j'ai déclaré la variable $code, à laquelle nous ajouterons un caractère à chaque tour de boucle :

<?php
    function generer($longueur)
    {
    $minuscules = 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');
    $majuscules = 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');
    $code = ''; //On déclare notre variable
        for ($i = 1; $i <= $longueur; $i++)
        {
        //On génère un type aléatoire
        $type = rand(0,2);
            switch ($type)
            {
                case 0:
                //On génère un chiffre
                break;
                
                case 1:
                //On génère une lettre majuscule
                break;
                
                case 2:
                //On génère une lettre minuscule
                break;
            }
        }
    return $code; //On retourne le code généré au complet
    }
?>

Ensuite, comme expliqué plus haut, nous générons selon le cas. Remarquez bien comment je procède pour les lettres :

<?php
    function generer($longueur)
    {
    $minuscules = 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');
    $majuscules = 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');
    $code = ''; //On déclare notre variable
        for ($i = 1; $i <= $longueur; $i++)
        {
        //On génère un type aléatoire
        $type = rand(0,2);
            switch ($type)
            {
                case 0:
                     $caractere = rand(0,9);
                     $code .= $caractere;
                break;
                
                case 1:
                     $nbre_aleatoire = rand(0, 25);
                     $caractere = $majuscules[$nbre_aleatoire];
                     $code .= $caractere;
                break;
                
                case 2:
                     $nbre_aleatoire = rand(0, 25);
                     $caractere = $minuscules[$nbre_aleatoire];
                     $code .= $caractere;
                break;
            }
        }
    return $code; //On retourne le code généré au complet
    }
?>

Aussi simple que ça . Et tiens, pour ceux qui ne sont pas habitués aux switch(), voici comment procéder avec des simples conditions :

<?php
    function generer($longueur)
    {
    $minuscules = 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');
    $majuscules = 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');
    $code = ''; //On déclare notre variable
        for ($i = 1; $i <= $longueur; $i++)
        {
        //On génère un type aléatoire
        $type = rand(0,2);
            if ($type == 0)
            {
                $caractere = rand(0,9);
                $code .= $caractere;
            }
            if ($type == 1)
            {
                $nbre_aleatoire = rand(0, 25);
                $caractere = $majuscules[$nbre_aleatoire];
                $code .= $caractere;
            }
            if ($type == 2)
            {
                $nbre_aleatoire = rand(0, 25);
                $caractere = $minuscules[$nbre_aleatoire];
                $code .= $caractere;
            }
        }
    return $code; //On retourne le code généré au complet
    }
?>

Essayez, ça donne exactement le même résultat ;)

Ensuite, pour utiliser cette fonction, vous devez l'appeler, comme cela :

<?php
    $nbre_chars = 7; //Changez ce nombre, vous verrez ;)
    $code = generer($nbre_chars);
    echo $code; //On affiche le résultat :p
?>

Remarque : Pour utiliser votre fonction, elle doit être déclarée sur la page sur laquelle elle est appelée. Vous pouvez aussi la placer en include, ça donnera le même résultat. Sinon, ça ne fonctionnera pas.

Voilà, c'est déjà terminé, c'était pas bien difficile.
N'hésitez pas à poster vos commentaires ou encore à poser vos questions, ça me fera toujours plaisir d'y répondre.

A voir également
Ce document intitulé « Générateur de mots de passe » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous