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

Lo más fresco

  1. Cadena aleatoria en PHP (¡ahora también multi-byte!) Modificado
  2. Cookies en JavaScript Modificado
  3. Reiniciar Apache con cuidado (graceful restart) Modificado

Sugerencias del chef

Lo más visitado

  1. Dar formato a un número
  2. Fecha y hora
  3. Cookies
  4. Rotar logs en Windows
  5. Reiniciar Apache con cuidado (graceful restart)

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');

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 jueves 29 de julio de 2010 (21:27:17 +0200) 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-2010 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com