logo oujood
🔍

Fonction str_shuffle() en PHP : mélanger les caractères d'une chaîne

str_shuffle() réorganise aléatoirement les caractères d'une chaîne. Apprenez à l'utiliser pour générer des codes, créer des anagrammes ou produire des mots de passe simples — avec des exemples concrets.

OUJOOD.COM

La fonction str_shuffle() en PHP

PHP — référence des fonctions de manipulation de chaînes

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

str_shuffle() — Réorganise aléatoirement l'ordre des caractères d'une chaîne.

À quoi sert str_shuffle() ?

Quand vous appelez str_shuffle(), PHP prend tous les caractères de votre chaîne et les redistribue dans un ordre différent à chaque exécution. La chaîne d'entrée n'est pas modifiée — vous obtenez une nouvelle chaîne avec les mêmes caractères, mais mélangés.

C'est utile pour générer des codes de vérification, des identifiants temporaires ou des jeux de type anagramme. Par contre, si vous avez besoin d'un token cryptographiquement sûr (connexion, paiement, jeton de session sensible), préférez random_bytes() ou random_int() — le générateur aléatoire de str_shuffle() n'est pas conçu pour ça.

Syntaxe

str_shuffle(string $chaine): string
Paramètre Description

$chaine (string)

Requis. La chaîne dont vous voulez mélanger les caractères. Lettres, chiffres, symboles, caractères accentués : tout est accepté. La chaîne originale reste intacte.

Valeur de retour

Une nouvelle chaîne avec les mêmes caractères que l'entrée, dans un ordre aléatoire. La chaîne originale n'est pas touchée.

Exemples d'utilisation de str_shuffle()

Exemple 1 : mélanger une chaîne de base

Le plus simple possible. On passe une phrase à str_shuffle() et on affiche le résultat. Rechargez la page : le résultat change à chaque fois.

  📋 Copier le code

<?php
$phrase = "Bonjour le monde";

// str_shuffle() retourne les mêmes caractères dans un ordre aléatoire
$melange = str_shuffle($phrase);

echo "Original : " . $phrase . "<br>";
echo "Mélangé : " . $melange;

// Résultat possible : "doenol rmjuBon"
// À chaque exécution, l'ordre change
?>

Résultat en direct (change à chaque chargement) :

ldBnr uemo oejon

Exemple 2 : générer un code alphanumérique aléatoire

Cas d'usage fréquent : on définit un alphabet de caractères autorisés, on le mélange avec str_shuffle(), puis on découpe les N premiers caractères avec substr(). C'est rapide et lisible.

  📋 Copier le code

<?php
// Tous les caractères autorisés dans le code
$alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

// On mélange l'alphabet, puis on prend les 8 premiers caractères
$code = substr(str_shuffle($alphabet), 0, 8);

echo "Code généré : " . $code;
// Résultat possible : "K7mB2qX9"
?>

Exemple 3 : mot de passe simple (usage non critique)

Pour des mots de passe temporaires — réinitialisation, accès provisoire — str_shuffle() suffit. L'idée ici est de garantir qu'au moins un caractère de chaque type (minuscule, majuscule, chiffre, symbole) se retrouve dans le résultat avant de mélanger.

  📋 Copier le code

<?php
function genererMotDePasse(int $longueur = 12): string {
    $minuscules = "abcdefghijklmnopqrstuvwxyz";
    $majuscules = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $chiffres   = "0123456789";
    $symboles   = "!@#$%^&*()-_=+";

    // On assemble tous les types de caractères
    $base = $minuscules . $majuscules . $chiffres . $symboles;

    // Double mélange pour plus de variété
    $melange = str_shuffle(str_shuffle($base) . $base);

    return substr($melange, 0, $longueur);
}

echo "Mot de passe : " . genererMotDePasse(16);
// Résultat possible : "x7T@p2K!m9Lq-5Wd"
?>

Exemple 4 : code au format XXX-XXX-XXX avec implode()

Pour générer un code avec un format lisible (trois groupes de trois caractères séparés par des tirets), on combine str_shuffle() avec une boucle et implode().

  📋 Copier le code

<?php
function genererCodeFormat(): string {
    $base = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $segments = [];

    // Trois segments de 3 caractères chacun
    for ($i = 0; $i < 3; $i++) {
        $segments[] = substr(str_shuffle($base), 0, 3);
    }

    // On assemble avec des tirets
    return implode("-", $segments);
}

echo "Code produit : " . genererCodeFormat();
// Résultat possible : "K7M-Q3P-W9L"
?>

Points à retenir

  • Non cryptographique : str_shuffle() utilise le générateur pseudo-aléatoire de PHP. Pour tout ce qui touche à la sécurité (sessions, tokens, mots de passe réels), utilisez random_bytes().
  • Les caractères sont conservés : la fonction ne supprime ni n'ajoute rien. Elle change uniquement l'ordre.
  • Caractères multi-octets : avec des chaînes UTF-8 contenant des accents ou des emojis, le comportement peut être imprévisible selon la configuration PHP. Pour un usage fiable en UTF-8, passez par mb_str_split() + shuffle() + implode().

Fonctions liées

  • shuffle() : fait la même chose, mais sur un tableau
  • array_rand() : tire au sort une ou plusieurs clés d'un tableau
  • random_bytes() : génère des octets aléatoires cryptographiquement sûrs
  • substr() : extrait une portion d'une chaîne (utile pour limiter la longueur après le mélange)
  • str_split() : découpe une chaîne en tableau de caractères

Par carabde | Publié le 22 août 2014 | Mis à jour le 28 avril 2026