Scripts

Een CAPTCHA maken

CAPTCHA zorgt voor een scheiding tussen computer- en menselijke-identificatie. Je ziet het steeds vaker voorkomen dat wanneer je ergens registreert eerst een code moet worden overgetypt. Met andere woorden wordt er gekeken of de registreerder geen flooder is, of onnodig veel accounts aanmaakt. Hierbij een voorbeeld waarbij een CAPTCHA-image wordt aangemaakt. (CAPTCHA = Completely Automated Public Turing Test)

een-captcha-maken
//IMAGES ZIJN TE DOWNLOADEN OP http://proeftuin.dutchville.com/index.php?dir=codegenerator
//PAGINA WAARIN DE IMAGE GEPLAATST WORDT(start.php):
//STAPPEN:
//1. CREATIE VAN KEYCODE (formaat XXXX-XXXX-XXXX) dmv functie KEYGEN
//2. ENCRYPTIE VAN DE KEYCODE dmv functie ENCRYPT
//3. AANROEP VAN PLAATJE MET GEENCODEERDE KEYCODE
[code]<?php
  function keygen($max)
  {
    $items = "1234567890";
    $x = 1;
    $total = strlen($items) - 1;
    while($x <= $max)
    {
      $rand = rand(0, $total);
      $item = substr($items, $rand, 1);
      if($x == 1)
      {
        $key = $item;
      }
      elseif($x > 1)
      {
        $key .= $item;
      }
      $x++;
    }
    return $key;
  } 
  function encrypt($string, $key) {
   $result = '';
   for($i=0; $i<strlen($string); $i++) {
     $char = substr($string, $i, 1);
     $keychar = substr($key, ($i % strlen($key))-1, 1);
     $char = chr(ord($char)+ord($keychar));
     $result.=$char;
   }

   return base64_encode($result);
  }

  $keycode = keygen(4) . "-" . keygen(4) ."-" . keygen(4);
  $imglink = encrypt("$keycode", "ditismijngeheimesleutel");
?> 
<html>
<body>
  <img src="img.php?showcode=<?php echo $imglink; ?>">
</body>
</html>[/code]



//CREATIE VAN DE IMAGE (img.php) obv bar.png
//STAPPEN:
//1. DECRYPTIE VAN GET-VAR
//2. CREATIE VAN DE IMAGE
[code]<?php
  function decrypt($string, $key) {
   $result = '';
   $string = base64_decode($string);

   for($i=0; $i<strlen($string); $i++) {
     $char = substr($string, $i, 1);
     $keychar = substr($key, ($i % strlen($key))-1, 1);
     $char = chr(ord($char)-ord($keychar));
     $result.=$char;
   }

   return $result;
  }

  $keycode = $_GET['showcode'];
  $keycode = decrypt($keycode, ditismijngeheimesleutel);

  header("Content-type: image/png");
  $im = imagecreatefrompng("bar.png");
  $tekst1     = "REG CODE";
  $xas1       = 55;
  $yas1       = 10;
  $kleur1     = imagecolorallocate($im, 255, 102, 0);
  imagestring($im, 4, $xas1, $yas1, $tekst1, $kleur1);

  $tekst2     = $keycode;
  $xas2       = 25;
  $yas2       = 35;
  $kleur2     = imagecolorallocate($im, 102, 153, 255);
  imagestring($im, 6, $xas2, $yas2, $tekst2, $kleur2);

  imagepng($im);
  imagedestroy($im);
  header("Location: bar.png");
?>[/code]




In het bestand start.php wordt de image getoond. In de broncode is alleen de geencrypte keycode te zien. Stel dat je deze code plaatst in een registratiescript, dan kun je controleren of de waarde die de gebruiker invoerd overeenkomt met die van het plaatje.

Thats it!

gr.
Joost

Reacties

0
Nog geen reacties.