Une ligne de PHP chaîne aléatoire générateur?
Je suis à la recherche de la voie la plus courte pour générer au hasard/unique des chaînes et à qui j'ai été en utilisant les deux suivantes:
$cClass = sha1(time());
ou
$cClass = md5(time());
Cependant, j'ai besoin de la chaîne de commencer par un caractère de l'alphabet, j'ai été à la recherche à l'encodage base64, mais qui ajoute ==
à la fin et puis j'aurais besoin de me débarrasser de cela.
Quelle serait la meilleure façon d'atteindre cet objectif avec une seule ligne de code?
Mise à jour:
PRNDL est venu avec une bonne suggestions qui j'ai fini de l'utiliser, mais un peu modifié
echo substr(str_shuffle(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ),0, 1) . substr(str_shuffle(aBcEeFgHiJkLmNoPqRstUvWxYz0123456789),0, 31)
Donnerait 32 caractères imitant le hachage md5, mais il serait toujours le produit le premier caractère d'une lettre de l'alphabet, comme;
Cependant, Uours vraiment améliorées, et sa réponse;
substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 1).substr(md5(time()),1);
est plus court et plus doux
La suggestion de l'autre par Anonymous2011 était très impressionnant, mais le premier caractère pour quelque raison serait toujours soit M, N, Y, Z, afin de na pas répondre à mes fins, mais qui aurait été la réponse choisie, d'ailleurs personne ne sait pourquoi ce serait toujours le rendement de ces lettres?
Voici l'aperçu de ma version modifiée,
echo rtrim(base64_encode(md5(microtime())),"=");
- Pourquoi a-t-il besoin d'être réalisé au sein d'une seule ligne de code?
- La question en ce qui concerne ce n'est pas la sortie du premier caractère dans l'alphabet... pourquoi fermer la mine?
- Si vous les gars vous vous demandez pourquoi la première lettre, eh bien, je suis en train de faire quelques tests avec des éléments div,... classes ou id de ne pas accepter les numéros sur le premier caractère et ils ne sont pas accepter le caractère spécial de n'importe où
- Préfixe ceux avec un trait de soulignement
_0000
œuvres. - préfixe quoi? pouvez-vous donner un exemple svp
- "_0000".sha1(time()); - préfixe par simple concaténation de chaîne
- merci Kai, j'ai mis à jour ma question les gars 🙂
Vous devez vous connecter pour publier un commentaire.
Plutôt que de brouiller l'alphabet chaîne , c'est plus rapide pour aller d'un simple hasard char .
D'obtenir une seule aléatoire char de la chaîne, puis ajouter le
md5( time( ) )
à elle . Avant d'ajoutermd5( time( ) )
supprimer un char afin de garder la résultante de la longueur de la chaîne de 32 caractères :Version en minuscules :
Ou même plus courte et un tout petit peu plus rapide version en minuscules :
Une note pour toute personne qui cherche à générer de nombreuses chaînes aléatoires à l'intérieur d'une seconde:
Depuis
time( )
retourne de temps en secondes ,md5( time( ) )
sera le même tout au long d'une seconde donnée de temps en raison de laquelle de nombreuses chaînes aléatoires ont été générés dans un deuxième temps, ceux qui pourraient probablement avoir quelques doublons .J'ai testé à l'aide de code ci-dessous . Ce tests minuscules version :
30128fb9b80c5697a4a3954b96e1295
mt_rand(0, 50)
. Il a étémt_rand(0, 51)
précédemment .mt_rand(0, 51)
. Il y a 52 lettres et vous soustrayez 1 à cause de l'index basé sur 0.J'avais trouvé quelque chose comme ceci:
Si vous en avez besoin pour commencer par une lettre, vous pourriez le faire. C'est salissant... mais c'est une ligne.
base64
partie de la question.J'ai décidé que cette question a besoin d'une meilleure réponse. Comme le code de golf! Cela utilise aussi une meilleure aléatoire générateur d'octets.
Augmenter le nombre d'octets pour un long mot de passe, évidemment.
str_replace(array('/', '=', '+'), '', ...
, qui pourrait être plus rapide.base_convert(microtime(true), 10, 36);
Crée un 200 char à long hexdec chaîne:
maaarghk réponse est meilleur.
J'ai généré ce code pour vous. Simple, court et (resonably) élégant.
Il utilise le base64 comme vous l'avez mentionné, si la longueur n'est pas important pour vous - Cependant il supprime le "==" utiliser str_replace.
Vous pouvez essayer ceci:
J'utilise cette fonction
utilisation:
$uc == 1
,$n == 1
:-Sarray_rand
if ($uc)
$length
comme0
- la fonction va jeter un avis sur undefined$rstr
variableecho improve(constant(Alix),True);
echo improve(constant(Alix),True);
--- il jette unMayBeAnotherDay
exception 🙁$
, chaînes non encapsulé en double ou des apostrophes et les OP demandé de trouver une solution qui ne pas démarrer avec un certain nombre.mt_srand
n'est pas nécessaire depuis PHP 4.2.0.$imput
!=$input
,length1
!=$length1
.Cela dépend vraiment de vos besoins.
J'avais besoin de chaînes pour être unique entre les séries de tests, mais pas beaucoup d'autres restrictions.
J'ai aussi besoin de ma chaîne pour commencer avec un personnage, et c'était assez bon pour mon but.
$mystring = "/a" . microtime(true);
Exemple de sortie:
a1511953584.0997
J'utilise celui-ci pour générer des dizaines de chaînes uniques en un seul coup, sans les répéter, sur la base d'autres bons exemples ci-dessus:
De cette façon, j'ai été en mesure de générer 1.000.000 chaînes uniques en environ 5 secondes. Ce n'est pas QUE rapide, je sais, mais comme je l'ai seulement besoin d'une poignée d'entre eux, je suis ok avec elle. Par la manière, la production est de 10 chaînes a pris moins de 0,0001 ms.
JavaScript Solution:
URL de référence : Générer la chaîne de caractères aléatoires à l'aide de JavaScript
Solution PHP:
URL de référence : Générer de l'aléatoire de la Chaîne à l'aide de PHP
Cette fonction renvoie aléatoire minuscule string:
Je trouve que le codage base64 est utile pour créer des chaînes aléatoires, et l'utilisation de cette ligne:
Il me donne une chaîne aléatoire de 12 postes, avec l'avantage supplémentaire que l'aléatoire est "cryptographiques".
pour générer des chaînes se compose de caractères aléatoires, vous pouvez utiliser cette fonction
Comment faire correspondre les OPs demande initiale dans un terrible moyen (étendue pour des raisons de lisibilité):
L'un des derniers array_fill() allait changer le '7' à votre longueur - 1.
Pour celui qui n'tous les alpha-nurmeric (Et encore lent):