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

Canales RSS

Lo más fresco

  1. Bookmarklets Nuevo
  2. Recetario básico para CakePHP/2 Nuevo
  3. Certificado auto-firmado Nuevo

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Reiniciar secuencia
  4. Vaciar un esquema
  5. Certificado auto-firmado
Compartir esta página

Cadena aleatoria

Una cadena aleatoria es algo que siempre viene bien.

/** * Genera una cadena aleatoria * * @param int $longitud Tamaño del resultado * @param string $caracteres Lista de caracteres de donde elegir * @return string * * @version v2012-07-15 */ function cadena_aleatoria($longitud=16, $caracteres='0123456789abcdefghijklmnopqrstuvwxyz'){     $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:

/** * Genera una cadena aleatoria; admite caracteres multi-byte * * @param int $longitud Tamaño del resultado * @param string $caracteres Lista de caracteres de donde elegir * @return string * * @version v2012-07-15 */ function mb_cadena_aleatoria($longitud=16, $caracteres='0123456789abcdefghijklmnopqrstuvwxyz'){     $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

v2012-07-15
Documentar mejor (sin cambios en el código).
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 sábado 23 de septiembre de 2017 (02:23:03 +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-2017 by Álvaro González (alvaro.es) • Burgos (España) • borrame.com