Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GÉNÉRER UNE CHAÎNE ALÉATOIRE SANS BOUCLE NI CRYPTAGE (MD5 OU AUTRE)


Information sur la source

Catégorie :Chaîne de caratère Classé sous : clé, aléatoire, caractères, chaîne, string Niveau : Débutant Date de création : 22/06/2008 Date de mise à jour : 24/06/2008 11:11:58 Vu : 3 155

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Jusqu'à présent tous les générateurs de clé que j'ai trouvé utilisait une boucle ou les fonction sha1, md5...

Donc je voulais présenter une autre technique qui me semble plus simple et plus flexible pour générer des chaînes aléatoires qui utilise uniquement des fonctions de manipulation de chaînes.
 

Source

  • define('ALPHABET','azertyuiopqsdfghjklmwxcvbn'); //Entrez les caractères que vous voulez
  • $longueur=8;
  • $cle=substr(str_shuffle(str_repeat(ALPHABET,$longueur)),0,$longueur);
  • // str_repeat(ALPHABET,$longueur) répète l'alphabet 8 fois pour permettre à une lettre d'apparaître plusieurs fois
  • // str_shuffle(...) mélange la source de lettres
  • // substr(...,0,$longueur) prélève les 8 premiers caractères
define('ALPHABET','azertyuiopqsdfghjklmwxcvbn'); //Entrez les caractères que vous voulez
$longueur=8;
$cle=substr(str_shuffle(str_repeat(ALPHABET,$longueur)),0,$longueur);
// str_repeat(ALPHABET,$longueur) répète l'alphabet 8 fois pour permettre à une lettre d'apparaître plusieurs fois
// str_shuffle(...) mélange la source de lettres
// substr(...,0,$longueur) prélève les 8 premiers caractères

Conclusion

PHP 4.3 est nécessaire
 

Historique

24 juin 2008 11:11:58 :
Commentaires explicatifs

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 23/06/2008 05:58:57

salut

pour une chaine de n caracteres, t'as n! possibilites, ce qui est enorme, mais t'as aucune garentie de l'aleatoire de la fonction str_shuffle, contrairement aux fonctions genre unique_id ou : md5(microtime()) qui semble _beaucoup_ plus fiables, meme si leur resultat est moins joli.

signaler à un administrateur
Commentaire de kylekatarnls le 23/06/2008 15:46:38

Oui, ce genre de système convient plutôt à une image anti-bot ou ce genre de choses. C'est pour ça que le titre est "générer une chaîne" et pas "générer une clé".

signaler à un administrateur
Commentaire de aKheNathOn le 24/06/2008 00:57:04

ça serais pas un snippet ça ?

L'astuce semble sympa - quelques corrections ligne 3 : str_repeat et non str_reapeat. Il faudrait que t'expliques ton code ligne par ligne / voire fonction par fonction.

Tu définit un dico / puis une longeur.
1ére remarque :
le dico pourrais être dans une constante et la longeur un paramètre de fonction. Ca donnerais ça :

define('DICO', 'azertyuiopqsdfghjklmwxcvbn');
function genRandChar($length = 8) {
  return substr(str_shuffle(str_repeat(DICO,$length)),0,$length);
}

Tu fait un str-repeat donc tu dupliques dans une chaine ton dico N fois. Ensuite tu lui demandes de mélanger l'ensemble de la chaîne str-shuffle. Puis tu prends depuis le début jusqu'à la longeur demandée.

A mon avis c'est pas bon - t'as 20 lettres dans le dico (je simplifie), tu veux un mot de passe de 8 lettres et tu lui demandes de mélanger 160 lettres (8 * 20) pour n'en retourner que les 8 premières. Pas bon au niveau perfs - fais un tour sur les commentaires de cette page :
http://fr2.php.net/manual/fr/function.str-shuffle.php

signaler à un administrateur
Commentaire de kylekatarnls le 24/06/2008 11:09:02

La multiplication de l'alphabet par la longueur sert à obtenir l'équiprobabilité de chaque caractère. Ce n'est pas tout à fait exact mais au moins une lettre peut se trouver en double dans le code (ce qui fait 26 puissance 8 possibilité) alors que si on prend un seul alphabet, les lettres n'apparaissent qu'une seule fois (et on a 26! possibilité) ce qu'estimait COUCOU747 qui n'a pas du voir le str_repeat. Après c'est à l'utilisateur de juger où est son intérêt, pour la constante en effet, c'est le genre d'habitude que j'ai du mal à prendre.

signaler à un administrateur
Commentaire de GillesWebmaster le 30/06/2008 11:03:19

Tout ça reste théorique car vous oubliez encore l'analyse combinatoire de la fonction str_shuffle()!

signaler à un administrateur
Commentaire de GillesWebmaster le 30/06/2008 11:05:03 8/10

Mais bon l'idée est bonne même si la chaine ne sera jamais (théoriquement) unique; savoir sortir des chemins battus est parfois une bonne idée; encourageons cela, nous autres programmeurs bornées ;-)

signaler à un administrateur
Commentaire de kylekatarnls le 01/07/2008 16:59:10

Merci GillesWebmaster pour ton encouragement et je tiens à le rappeler, c'est bien une chaîne aléatoire et non une clé unique.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Vérifier la présence de caractères interdits [ par Rimb0 ] Bonjour &#224; tous !Je suis&nbsp; en train de coder une partie pour les commentaires pour mon blog perso et j'ai un peu du mal... c'est pourquoi je f format chaîne de caractères [ par mark01 ] Bonjour à tous,voiçi mon problème :J'ai une base de données PostgreSQL. Une appli php. Dans une des tables j'ai un attribut de type chaîne de caractèr extraire chaîne caractères [ par eax ] salutj'ai un petit pb de traitement de chaines de caractères :j'ai une variable avec du contenu dedans (je ne sais pas ce qu'il y a exactement dedans découpage chaîne de caractère [ par suethi75 ] Bonsoir, Je voudrais découper des chaîne de caractère dont je ne connais pas forcément la taille. Je sais juste que je dois prendre les 2 ou 3 premier je suis pommé, je comprend plus rien google map et sql help me please [ par laser45 ] Error convertoring HTML to XHTML: System.ArgumentException: The empty string '' is not a valid name. at System.Xml.XmlTextWriter.ValidateName(Strin donnees passees en POST se retrouvant avec "_" [ par bouletsensei ] bonjour.Je vais vous exposer mon probleme. J ai un formulaire, dont les donnees sont extraites d une base de donnnees (c est un systeme de sondages). Mot clé static [ par slurp ] qui pourrais m'expliquer le mot clé static, pasque moi je serais tenter de l'utiliser partout vu que pas besoin d'instancié la class.S'il vous plait u afficher une partie d'une chaine de caractere [ par stageman ] Bonjour, je souhaiterais savoir si il existe une fonction (ou un autre moyen) en php pour n'afficher qu'une partie d'une chaine.< probleme formulaire [ par laloire33150 ] Error convertoring HTML to XHTML: System.ArgumentException: The empty string '' is not a valid name. at System.Xml.XmlTextWriter.ValidateName(Strin afficher une variable avec <?= $mavar; ?> [ par karmel ] Error convertoring HTML to XHTML: System.ArgumentException: The empty string '' is not a valid name. at System.Xml.XmlTextWriter.ValidateName(Strin


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,718 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.