Supprimer les caractères d'une chaine

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Supprimer les caractères d'une chaine

par HanX » 22 juin 2006, 15:37

$pass = substr( md5( rand() * 1000 ) , 0 , 10 );
echo $pass;
très bon j'adopte :) et merci :D

par Orni » 22 juin 2006, 14:33

Bonne solution également :] Je prends Image

par goeb » 22 juin 2006, 14:27

ou bien, pour générer des caractères aléatoirement :
$resultat = '';
$nombre_de_caracteres = 10;
for ($i=0; $i<$nombre_de_caracteres; $i++) {
  $n = rand(0, 35); // 36 valeurs possibles
  if ($n < 10) $c = chr($n+40); // caractères de 0 à 9
  else $c = chr($n+55); // caractères de A à Z
  $resultat .= $c;
}

par Orni » 21 juin 2006, 15:21

Oui c'est vrai, mais bon il demandait une solution pour garder que les bons caractères :lol:

Sinon solution simple pour générer un pass plutôt dur :
$pass = substr( md5( rand() * 1000 ) , 0 , 10 );
echo $pass;
10 de longueur, que des chiffres et des lettres minuscules. Après on peut toujours trafiquer pour faire quelques majuscules ^____^

PS : Sans substr() le pass fait 32 de long.

par zigz4g » 21 juin 2006, 15:16

Salut.

Petit problème avec la solution du ereg_replace, c'est que ton mot de passe peut devenir trop petit voir même nulle.
$test = "//{][$#@";
$test = reg_replace( "[^a-zA-Z0-9]" , "" ,  $test );
echo $test;// donne ''
J'exagère bien sur mais je montre le petit problème.
Je regarderais au minimum la longueur de la chaîne ou je ferais une fonction avec un random (fonction rand()).

par Orni » 21 juin 2006, 15:10

$test = "ja7/cqty";
$test = ereg_replace( "[^a-zA-Z0-9]" , "" ,  $test );
Dans ce cas $test devrait égaler : ja7cqty

Supprimer les caractères d'une chaine

par HanX » 21 juin 2006, 14:26

Voilà je suis en train de générer des login/pass. Le code est nickel, sauf que lorsque je génère certains pass, ça me sort des caractères de ponctuation :oops: Je veux que des lettres (maj ou min je m'en fous) et des chiffres

J'ai regardé la doc de preg_replace() mais j'ai rien compris :?
<? 
include 'connexion.php';
$prenom='Jacques';
$nom='Chirac';
$login=gen_login($prenom,$nom);
$pass=gen_pass($login,$prenom);


///*************************************************

function gen_login($prenom,$nom) {
$login=substr($prenom, 0, 1);
$pos = strpos($nom,'-');
if ($pos)
	{ $nom=substr($nom,0,$pos); }

$login.=$nom;
$login=strtolower($login);
$ok=false;
while(!$ok)
	{
	if(veriflogin($login))
		{ $ok=true; }
	else
		{
		$i++;
		$login.=$i;
		}
	}
echo 'LOGIN : '.$login.'<br>';
return $login;
}


function gen_pass($login,$prenom) {
$pass=strtolower(crypt($login,$prenom));
if(strlen($pass)>8)
	{ $pass=substr($pass, 0, 8);}
echo 'PASS  : '.$pass.'<br>';
return $pass;
}
//*******************************************//

function veriflogin($login) {
$sql="select login from partenaires where login='".$login."'";
$res=mysql_query($sql);
if (mysql_num_rows($res)>0)
	{ return false; }
$sql="select login from candidats where login='".$login."'";
$res=mysql_query($sql);
if (mysql_num_rows($res)>0)
	{ return false; }
return true;
}
?> 
Dans le cas, jacques chirac (vive le jeu d'essai, non ?) ça m'affiche :

Code : Tout sélectionner

LOGIN : jchirac PASS : ja7/cqty