Ik ben de laatste tijd bezig met classes in php, als gevolg hiervan ben ik veel dingetjes aan het uitzoeken en uitproberen. Bij wijze van test heb ik een captcha class geschreven, captcha zijn die afbeeldingen met tekens erin die je vaak bij formulieren ziet, ze worden gebruikt om spambots tegen te houden.

maar goed genoeg geluld nu naar de code.

Voorbeeld: klik hier
Download: klik hier
captcha.class.php

  1.  
  2. <php    
  3.  
  4. class Captcha {protected $img;    
  5.  
  6.  protected $code;    
  7.  
  8. private $font = "ARLRDBD.TTF";    
  9.  
  10. function __construct() {    
  11.  
  12.         session_start();    
  13.  
  14.         $this->img = imagecreatetruecolor(150, 50);    
  15.  
  16.  }    
  17.  
  18. private function createCode($length)    
  19.  
  20.  {    
  21.  
  22.         $characters = array_merge(range(‘A’, ‘F’), range(‘a’, ‘f’), range(‘0′, ‘9 ‘));    
  23.  
  24. for ($i = 0; $i < $length; $i++)    
  25.  
  26.         {    
  27.  
  28.                 $nr = mt_rand(0,count($characters));    
  29.  
  30.                 $this->code .= $characters[$nr];    
  31.  
  32.         }    
  33.  
  34. return $this->code;    
  35.  
  36.  }    
  37.  
  38. public function createImg($codeLength,$achtergrondkleur, $aantal_lijnen)    
  39.  
  40.  {    
  41.  
  42.         /* Create the code and store it in a session var */    
  43.  
  44.         $code = $this->createCode($codeLength);    
  45.  
  46.         $_SESSION[‘captcha_code’] = strtoupper($code);    
  47.  
  48. /* Img settings */    
  49.  
  50.         $kleur = imagecolorallocate($this->img, 255, 0, 0);    
  51.  
  52.         $lijnkleur = imagecolorallocate($this->img, 200, 200, 200);    
  53.  
  54.         $font = $this->font;    
  55.  
  56.         $background = $this->getRGB($achtergrondkleur);    
  57.  
  58.         $achtergrond = imagecolorallocate($this->img, $background[0], $background[1], $background[2]);    
  59.  
  60. /* Image methods */    
  61.  
  62.         imagefill($this->img, 0, 0, $achtergrond);    
  63.  
  64.         ImageTTFText($this->img, 16, mt_rand(-6,6), 35, 35, $kleur, $font, $code);    
  65.  
  66. /* Create lines */    
  67.  
  68.         for ($i = 0; $i < $aantal_lijnen; $i++)    
  69.  
  70.         {    
  71.  
  72.                 ImageLine($this->img, 0, mt_rand(-50,100), 550, mt_rand(0,150), $lijnkleur);    
  73.  
  74.         }    
  75.  
  76. return imagepng($this->img, $file);    
  77.  
  78.  }    
  79.  
  80. public function getRGB($hex = ) {    
  81.  
  82.         $hex = substr($hex, 0, 1) == ‘#’ ? substr($hex, 1) : $hex;    
  83.  
  84.         $rgb = array();    
  85.  
  86. for ($i = 0; $i < 6; $i += 2) {    
  87.  
  88.                 $rgb[] = hexdec(substr($hex, $i, 2)) ;    
  89.  
  90.         }    
  91.  
  92.         return $rgb;    
  93.  
  94.  }    
  95.  
  96. public function __destruct() {    
  97.  
  98.         imagedestroy($this->img);    
  99.  
  100.  }    
  101.  
  102. }    
  103.  
  104. ?>

je kunt hem op de volgende manier gebruiken:

captcha.php

  1.  
  2. <php    
  3.  
  4. require_once("captcha.class.php");    
  5.  
  6. $captcha = new Captcha();    
  7.  
  8. print $captcha->createImg(6, "eeeeee", 5);    
  9.  
  10. ?>

formulier.php

  1.  
  2. <php
  3. session_start();if (isset($_POST[’submit’]))    
  4.  
  5. {    
  6.  
  7.  if (strtoupper($_POST[‘cCode’]) == $_SESSION[‘captcha_code’])    
  8.  
  9.         echo "Goed ingevuld";    
  10.  
  11.  else    
  12.  
  13.         echo "fout ingevuld";    
  14.  
  15. }    
  16.  
  17. ?>    
  18. <form method="post">
  19.         <img src="captcha.php" />    
  20. <input name="cCode" />
  21. <input name="submit" type="submit" /></form>

Mocht je vragen hebben over de werking van deze klasse of heb je misschien opmerkingen over wat beter kan meld het dan!

Stem of voeg toe aan:  Plaatsen/stemmen op NUjij Plaatsen/stemmen op eKudos Plaatsen/stemmen op MSN Reporter Plaatsen/stemmen op Digg Stumble it! Voeg dit artikel toe aan Del.icio.us Voeg toe aan je Google bladwijzers Abonneer je op de RSS-feed van deze site Verstuur deze pagina per e-mail via Feedburner