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.
<?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.
<?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.
<?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().
<?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
Fonction précédente: |
Fonction suivante: |
Par carabde | Publié le 22 août 2014 | Mis à jour le 28 avril 2026