Supprimer les caractères d'une chaine

Eléphant du PHP | 197 Messages

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

Eléphant du PHP | 50 Messages

21 juin 2006, 15:10

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

Mammouth du PHP | 684 Messages

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()).
Zigz4g

Eléphant du PHP | 50 Messages

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.

Eléphant du PHP | 413 Messages

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;
}
--
Goeb

Eléphant du PHP | 50 Messages

22 juin 2006, 14:33

Bonne solution également :] Je prends Image

Eléphant du PHP | 197 Messages

22 juin 2006, 15:37

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