W3docs

str_shuffle()

Aprende sobre la función PHP str_shuffle(), que reordena aleatoriamente los caracteres de una cadena. Incluye sintaxis, ejemplos y advertencias de seguridad.

La función PHP str_shuffle() reordena aleatoriamente los caracteres de una cadena y devuelve el resultado como una nueva cadena. Cada carácter del original se mantiene exactamente una vez — solo cambian sus posiciones — por lo que la salida es siempre un anagrama de la entrada con la misma longitud. Esta página cubre la sintaxis, el valor que devuelve, ejemplos ejecutables, errores comunes (incluida una advertencia crítica de seguridad) y funciones relacionadas.

Sintaxis

str_shuffle(string $string): string

Parámetros

  • $string (requerido) — la cadena de entrada cuyos caracteres se desean mezclar.

Valor de retorno

str_shuffle() devuelve una nueva cadena que contiene los mismos caracteres que $string en un orden aleatorio. La cadena original no se modifica, porque PHP pasa el valor por valor y la función devuelve una cadena nueva. La cadena devuelta siempre tiene la misma longitud que la entrada.

Ejemplo básico

php— editable, runs on the server

Aquí $string contiene "Hello, World!". str_shuffle() reordena sus 13 caracteres de forma aleatoria y devuelve el resultado mezclado, que almacenamos en $shuffled e imprimimos. Como el orden es aleatorio, verás una disposición diferente en casi cada ejecución — pero las letras, la coma, el espacio y el signo de exclamación siguen presentes.

Generación de una cadena o token aleatorio

Un caso de uso común es construir un código corto aleatorio mezclando un conjunto de caracteres permitidos y tomando los primeros:

<?php
$pool = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$code = substr(str_shuffle($pool), 0, 6);
echo $code; // e.g. "K3PQ8A"

Esto garantiza que no haya caracteres repetidos en el código, ya que cada carácter del conjunto aparece como máximo una vez después de la mezcla.

Advertencia de seguridad: no usar para contraseñas ni tokens

str_shuffle() no es criptográficamente segura. Internamente usa el generador de números pseudoaleatorios de propósito general de PHP, que es predecible y no es adecuado para nada sensible en términos de seguridad. Nunca la uses para generar contraseñas, IDs de sesión, tokens de restablecimiento de contraseña ni claves de API.

Para valores aleatorios seguros, usa random_int() o random_bytes():

<?php
// Cryptographically secure 16-character token
echo bin2hex(random_bytes(8)); // e.g. "9f2c1ab07e3d4501"

Trabajo con cadenas multibyte (UTF-8)

str_shuffle() opera sobre bytes, no sobre caracteres Unicode. Para texto ASCII puro esto es lo mismo, pero para texto multibyte (como caracteres acentuados o no latinos) puede dividir un único carácter entre límites de byte y producir una salida inválida o con caracteres corruptos:

<?php
// "héllo" — the é is two bytes in UTF-8, so shuffling bytes can corrupt it
echo str_shuffle("héllo"); // may produce broken characters

Si necesitas mezclar caracteres Unicode de forma segura, divide primero la cadena en caracteres (por ejemplo con preg_split('//u', ...)), mezcla el array y vuelve a unirlo.

Notas y advertencias

  • La mezcla es uniforme en el sentido de que cada permutación es igualmente probable, pero el resultado no es determinista — no se puede sembrar directamente. (Sembrar el generador global con mt_srand() lo afecta en versiones antiguas de PHP, pero confiar en eso está desaconsejado.)
  • Pasar una cadena vacía devuelve una cadena vacía.
  • Los caracteres duplicados se mantienen duplicados — mezclar "aaa" siempre devuelve "aaa".
  • La variable original no cambia; asigna el valor de retorno para conservar el resultado.

Funciones relacionadas

  • shuffle() — reordena aleatoriamente los elementos de un array (no de una cadena).
  • str_split() — divide una cadena en un array de caracteres, útil para mezclas seguras con multibyte.
  • mt_rand() — genera un entero aleatorio.
  • str_repeat() — repite una cadena un número determinado de veces.
  • str_replace() — reemplaza ocurrencias de una subcadena.

Práctica

Práctica
¿Qué puedes lograr usando la función str_shuffle() en PHP?
¿Qué puedes lograr usando la función str_shuffle() en PHP?
Was this page helpful?