borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Reemplazar selección con JavaScript Nuevo
  2. ¿Esta IP pertenece a esta red? Modificado
  3. Mozilla Firefox Modificado

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Fecha y hora
  3. Campo autonumérico
  4. Rotar logs en Windows
  5. Reiniciar Apache con cuidado (graceful restart)
Compartir esta página

Cadena aleatoria

Una cadena aleatoria es algo que siempre viene bien.

/**
 * Devuelve una cadena aleatoria de la longitud indicada
 * Los caracteres se eligen de la lista [opcional] proporcionada
 */

function cadena_aleatoria($longitud=16, $caracteres='0123456789abcdefghijklmnopqrstuvwxyz'){ // v2008-03-17
    $cadena = '';
    $max = strlen($caracteres)-1;

    for($i=0; $i<$longitud; $i++){
        $cadena .= $caracteres[mt_rand(0, $max)];
    }
    return $cadena;
}

Versión multi-byte

Si estamos usando UTF-8 (por ejemplo) necesitaremos esta otra versión, que maneja caracteres en lugar de bytes:

/**
 * Devuelve una cadena aleatoria de la longitud indicada elegidos entre la lista proporcionada;
 * contempla caracteres multi-byte
 */

function mb_cadena_aleatoria($longitud=16, $caracteres='0123456789abcdefghijklmnopqrstuvwxyz'){ // v2010-06-03
    $cadena = '';
    $max = mb_strlen($caracteres)-1;

    for($i=0; $i<$longitud; $i++){
        $cadena .= mb_substr($caracteres, mt_rand(0, $max), 1);
    }
    return $cadena;
}

No se olviden de ajustar el mbstring.internal_encoding con mb_internal_encoding() o lo que tengan más a mano.

Ejemplos de uso

// Imagen que no se lee de la caché
echo '<img src="foo.png?' . cadena_aleatoria() . '">';

// Generar una contraseña
echo cadena_aleatoria(8);

// Rellenar una quiniela
echo cadena_aleatoria(14, '111XX2');

// Dar conversación a un robot
echo cadena_aleatoria(1024, ' 01');

También disponemos de versión en JavaScript.

Historial

v2010-06-03
Version multi-byte.
v2008-03-17
Eliminado mt_srand(), es innecesario desde PHP/4.2.0.
Naturalmente, es suficiente con calcular la longitud de $caracteres una vez.
Reemplazado el operador {} por [] (las llaves las van a quitar en PHP/6).
v2005-05-24
Primera versión.

Gracias a Pedro Graca por llamarme la atención sobre los dos fallos obvios de la primera versión... en diciembre de 2005. Más vale tarde que nunca.

Esta página ha sido impresa el miércoles 8 de febrero de 2012 (01:48:10 +0100) desde http://borrame.com/recortes/php/cadena-aleatoria.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2011 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com