Générer chaine aléatoire

Bonjour,

je voulais savoir si vous connaissiez un moyen de générer une chaine de caractère (8 caractère) aléatoirement en utilisant comme type de caractère : a-z 0-9 A-Z.

Le but étant d’utiliser ses chaines pour renommer des photos pour les stocker dans une base de donnée.

Langage de programmation utilisé : PHP.

Merci d’avance.

uniq_id ou sha1(mtand()) en PHP, ça devrait être suffisamment aléatoire. Sinon, si c’est pour stocker en base, une séquence numérique fait largement l’affaire…


        $chaine = "";
        $taille = 8;
        $lettres = "abCdefGhijklmNopqrstUvwXyz0123456789";
        srand(time());
        for ($i = 0;$i < $taille;$i++)
        {
            $chaine .= substr($lettres, (rand() % (strlen($lettres))), 1);
        } 

Ou ça : substr(sha1(mt_rand()), 0, 8);

sha1 ne contient que des minuscules ? :hum:

Oui. Ceci étant dit, vu que c’est pour générer un identifiant unique… c’est amplement suffisant, et ça évite des problèmes Win/Unix si c’est pour stocker les images sous forme de fichier.
Edité le 01/06/2010 à 16:25


function generate($longueur)
{
	$min = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
	$code = '';	   
    for ($i = 1; $i <= $longueur; $i++)
    {
    	$type = rand(0,2);

        switch ($type)
        {
            case 0:
            	$code .= rand(0,9); 
            break;
            
            case 1:
                 $code .= strtoupper($min[rand(0, 25)]);
            break;
            
            case 2:
                 $code .= $min[rand(0, 25)];
            break;
        }
    }
return $code;
}

Ca passe ça non ?

Tien je viens de tomber la dessus

php.net…

par contre j’ai pas tout regardé, mais je crois que tu ne peu pas définir un nombre de caractère

Bof tu as raison, le nombre de caractère est impossible à changer. En revanche il se base sur le timestamp donc il est plus difficile de faire une collision (bon je sais qu’avec 6 caractères, elle est de 1 sur 600 millions, mais).