Forum > PHP > Captcha

Captcha

Auteurs Messages
icone offline stc # Posté le 05/11/2010 à 21h10
avatar de stc
Rang: membre
Salut, j'ai codé un nouveau système de routine anti robot, je viens vous en faire profiter :
-Je dispose d'une image comprenant des caractères à la suite (dans l'exemple les caractères font 16*16 ) vous pouvez les récupérer à cette adresse, ce sont des vieilles fonts de demos.
-Aprés je genere ma captcha dans un fichier php que j'affiche comme une image
fichier : captcha.php :
Code:
<?php
header("Content-Type: image/png");
session_start();
$arrayChars=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","0","1","2","3","4","5","6","7","8","9");
$img= imagecreate(80, 16);
$imgFont= imagecreatefrompng("./../GFXs/font.png"); // fichier image de caractères.
$_SESSION['captcha']="";
for($i=0;$i<5;$i++) {
$key=rand(0, count($arrayChars)-1);
imagecopymerge($img,$imgFont ,($i*16) ,0 ,($key*16) ,0 , 16, 16, 100);
$_SESSION['captcha'].=$arrayChars[$key];
}
$_SESSION["captcha"]=sha1($_SESSION["captcha"]);
imagepng($img);
?>

Dans ce fichier j'utilise une variable de session ($_SESSION["captcha"] dans laquelle se trouve le code antibot crypté.
Pour afficher ma captcha j'ai juste à utiliser une balise img :
Code:
<img src="captcha.php" width="80" height="16" alt="captcha"/>

-Avec un formulaire je récupère alors le code tapé par l'utilisateur (par exemple dans une balise texte nommé captcha :
Code:
<input type="text" name="captcha" value="" size="5" maxlength="5" />

Puis je verifie dans un script de verification de formulaire :
Code:
$captcha=$_post['captcha'];
$captcha=strtolower($captcha); //la session etant en minuscule je met tout en minuscule (insensible à la casse);
if(sha1($captcha)!=$_SESSION['captcha']) {
//le code n'est pas bon
} else {
// le code est bon
}

Voila en espérant que ça en aide.
Tchao
icone online funnycat # Posté le 28/12/2010 à 20h58
avatar de funnycat
Rang: administrateur
Bonjour.
Merci beaucoup de faire partager ce bout de code. Les robots de spams étant si dérangeants, un tel tutoriel est bien pratique.
J'ai une toute petite suggestion d'amélioration. Il peut être judicieux de retirer le "o" (la lettre) et "0" (le chiffre) pour éviter d'éventuelles erreurs.

J'espère que ce script est efficace. smiley
Ma page préférée? Le dossier référencement qui présente une multitude d'informations utiles. smiley
Sinon hors internet je suis développeur web PHP.
icone offline stc # Posté le 30/12/2010 à 18h45
avatar de stc
Rang: membre
Oui on peut enlever le 'o' et le '0' par contre il faudra les enlever des fonts, sur cette font on distingue bien le '0' qui a une barre au milieu.