Feb
1
2009
1
2009
Générer une chaîne aléatoire en PHP
Voici aujourd'hui une petite fonction dont je me sers pour générer des chaînes aléatoires :
/**
* Generates a random string within a range of given characters.
* @param $length Length of the randomly generated string.
* @return string
*/
function GenerateRandomString($length = 8)
{
// 67 allowed characters.
$allowedCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_@$%*";
$randomKey = '';
for($i = 1; $i < = $length; $i++)
{
$randomKey .= $allowedCharacters[rand(0, 66)];
}
return $randomKey;
}
Libre à vous par la suite d'inclure (ou d'exclure) certains caractères que vous pourrez considérer comme gênant. Par exemple, si vous voulez insérer une chaîne aléatoire dans un fichier XML, on évitera le symbole chevron. ;)
Related Posts
8 Comments + Add Comment
Leave a comment
Pages
Derniers commentaires
Tags
android
apache
auto-entrepreneur
benchmark
christine albanel
Cinéma
comic strip
court-métrage
css
curl
debian
désirs d'avenir
Eclipse
facebook
flex
google
hadopi
hello world
html5
javascript
jquery
linux
mootools
musique
mxml
MySQL
Patrick Bloche
PHP
réseaux sociaux
serveur dédié
Starcraft
Subversion
SUPINFO
symfony
Symfony2
Ségolène Royal
Twig
twitter
ubuntu
Windows
WordPress
xhtml
xkcd
xml
zend framework
Si j'étais toi, je ferais un count($chaine) pour le rand, comme ça si tu enlèves des caractères, pas besoin de changer le "66"...
Justement. Je n'ai pas utilisé cette fonction afin d'optimiser (très légèrement, certes) le code. En effet, une fois une chaîne donnée, on peut se passer du count. ;)
http://uk2.php.net/uniqid + hashage, c'est pas plus beautiful quand même ?
Et pourquoi ne pas déclarer une variable :
$count = count($chaine); avant la boucle for? Comme ça pas d'appel fonction à chaque itération mais une bonne flexibilité en cas de suppression/ajout de caractères
Pas mal simple et léger. Je suis aussi contre le count(), vu que la $chaine est mise en dur, on ne la changera pas souvent ;)
Pour optimiser, tu peux aussi utiliser mt_rand() au lieu de rand().
Pour avoir quelque chose "vraiment imprévisible", on peut faire ça sinon :
public static function GenerateRandomKey($nb_caract = 8) { $nb_caract_entropy = (int) ceil($nb_caract * 3 / 4); $entropy = fopen('/dev/urandom', 'r'); $raw = fread($entropy, $nb_caract_entropy); return substr(base64_encode($raw), 0, $nb_caract); }Exact. Merci Mazzu ! Pour info, la fonction mt_rand() est 4 fois plus rapide que la fonction rand(). Source : PHP.net.
Quant à ta fonction, je ne l'ai pas testée. Cependant, quelquechose me déplaît : le /dev/urandom, qui oblige le serveur à tourner sous Linux. Certes, généralement on a affaire à une architecture LAMP, mais il ne faut pas oublier que la majorité des développeurs utilisent un WAMP en développement... ;)
Merci, c'est exactement ce que je cherchais