Script d'un captcha anti robot - PHP  

Forum > PHP > Script d'un captcha anti robot

Script d'un captcha anti robot

avatar de stc
Membre
# Le 05/11/2010 à 21h10
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 à "http://www.sitededons.net/GFXs/font.png", ce sont des vieilles fonts de demos.
- Après je génère ma captcha dans un fichier php que j'affiche comme une image
fichier : captcha.php :
  1. <?php
  2. header("Content-Type: image/png");
  3. session_start();
  4. $arrayChars=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"
  5. ,"q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9");
  6. $img= imagecreate(80, 16);
  7. $imgFont= imagecreatefrompng("./../GFXs/font.png"); // fichier image de caractères.
  8. $_SESSION['captcha']="";
  9. for($i=0;$i<5;$i++) {
  10. $key=rand(0, count($arrayChars)-1);
  11. imagecopymerge($img,$imgFont ,($i*16) ,0 ,($key*16) ,0 , 16, 16, 100);
  12. $_SESSION['captcha'].=$arrayChars[$key];
  13. }
  14. $_SESSION["captcha"]=sha1($_SESSION["captcha"]);
  15. imagepng($img);
  16. ?>

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 :
  1. <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 :
  1. <input type="text" name="captcha" value="" size="5" maxlength="5" />

Puis je vérifie dans un script de vérification de formulaire :
  1. $captcha=$_post['captcha'];
  2. $captcha=strtolower($captcha); //la session etant en minuscule je met tout en minuscule (insensible à la casse);
  3. if(sha1($captcha)!=$_SESSION['captcha']) {
  4. //le code n'est pas bon
  5. } else {
  6. // le code est bon
  7. }

Voila en espérant que ça en aide.
Tchao
avatar de Tony_
Administrateur
# Le 28/12/2010 à 20h58
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
N'hésitez pas à consulter le dossier référencement. smiley
Sinon hors internet je suis développeur web PHP.
avatar de stc
Membre
# Le 30/12/2010 à 18h45
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.