SlideShow

Start Quote Captcha script met uitleg End Quote

10 maanden geleden --  Reacties 5  - Hits 1410

Een tijd terug had ik extreem veel last van Spam op mijn reactie pagina's en in mijn email van TrapperDesign.com. Na wat zoeken op internet naar AntiSpam scripts vond ik het lastig een mooi en simpel scriptje te vinden om Captcha's aan te maken. Uiteindelijk heb ik wat dingetjes gecombineerd en geschreven om zo tot een klein maar goed werkend Captcha script te komen. Na wat prutsen heb ik het script aan al mijn formulieren van TrapperDesign.com gekoppeld en ben blij te melden dat alle Spam per direct over was!

Aangezien ik weet hoe lastig het kan zijn om de juiste scripts te vinden heb ik besloten mijn Captcha script te delen met iedereen die op zoek is naar een goed werkend en simpel Captcha scriptje. Hieronder plaats ik mijn captcha script.

Ik heb de scripts voorzien van gedetailleerd commentaar om stapsgewijs duidelijk te maken hoe de Captcha tot stand komt. In het voorbeeld formulier kun je zien hoe het script geïntegreerd kna worden in een formulier op internet. Hieronder staan de scripts uitgeschreven. Voor een demo verwijs ik naar het reactie formulier onder aan deze pagina. Voor de liefhebber heb ik een zip bestandje online gezet om te downloaden: captcha.zip

Om de Captcha te gebruiken heb ik het script opgedeeld in 2 delen. Het eerste onderdeel is captcha.php Dit is het script dat de Captcha code en de afbeelding maakt. Ter verduidelijking heb ik alle stappen van commentaar voorzien:

 

captcha.php

// SCRIPT GESCHREVEN DOOR STEVEN GROOTHUISMINK
// VOOR INFORMATIE NEEM CONTACT OP VIA TRAPPERDESIGN.COM
// BIJ GEBRUIK VAN DIT SCRIPT WORDT EEN LINK NAAR WWW.TRAPPERDESIGN.COM GEWAARDEERD
// ENJOY! STEVEN GROOTHUISMINK, -- WWW.TRAPPERDESIGN.COM -- 2009
 
 
 
 
// Start de Session die nodig is om de Captcha code te gebruiken.
session_start();
 
// Lijst met alle letters en cijfers die gebruikt worden om de Captcha aan te maken. 
// Ik heb ervoor gekozen om een aantal letters en cijfers weg te laten aangezien deze veel op elkaar lijken (1, i).
$Characters = '23456789abcdefghjklmnpqrstuvwxyz'; 
 
// Aantal tekens dat gebruikt wordt om de Captcha aan te maken. 
// Ik heb het aantal ingesteld op 5
$chars = 5;
 
// Stel hieronder de afmetingen voor de Captcha afbeelding in.
// Ik heb gekozen voor 150 pixels breed bij 50 pixels hoog.
$Width = 150;
$Height = 50;
 
// Maak de Captcha code aan. De code hieronder kiest willekeurig het aantal tekens uit dat is vastgelegd.
// In het geval van dit voorbeeld worden er 5 willekeurige tekens gekozen uit de lijst $Characters
$i = 0;
while ($i < $chars) 
{ 
$randomnr .= substr($Characters, mt_rand(0, strlen($Characters)-1), 1);
$i++;
}
 
// Schrijf de aangemaakte Captcha code weg in een Session. 
// Ik versleutel de code met een md5 hash zodat de code niet zomaar uit de Session te lezen is.
$_SESSION['randomnr2'] = md5($randomnr);
 
// Start met het aanmaken van de afbeelding.
$im = imagecreatetruecolor($Width, $Height);
 
// Bepaal de kleuren die je wilt gebruiken. Deze Captcha maakt gebruik van 3 kleuren. 
// Kleur 1: $front is de Captcha Code waar het uitenidelijk om draait.
// Kleur 2: $shadow is de schaduw die ik achter de Captcha Code schrijf.
// Kleur 3: $background is de achtergrond kleur van de gehele Captcha afbeelding.
$front = imagecolorallocate($im, 255, 255, 255);
$shadow = imagecolorallocate($im, 128, 128, 255);
$background = imagecolorallocate($im, 6, 51, 125);
 
// Vul de aangemaakt afbeelding met de hierboven ingestelde achtergrond kleur.
imagefilledrectangle($im, 0, 0, $Width, $Height, $background);
 
// Stel het True Type Font in dat je wilt gaan gebruiken. 
// Zorg ervoor dat je de juiste locatie van je .ttf bestand invult. 
// Voor deze Captcha maak ik gebruik van Artbrush.ttf
$font = 'ArtBrush.ttf';
 
// Stel de max. en min. hoek in waarmee je de Captcha weg wilt schrijven. Gebruik hiervoor een getal tussen de 0 en 15.
// Deze hoeken worden hierna willekeurig bepaalt aan de hand van de ingestelde max. en min. waarden.
// $angle1 is de hoek waarin de Schaduw van de Captcha code wordt weergegeven.
// $angle2 is de hoek waarin de Captcha code zelf wordt weergegeven.
$angle1 = rand(-12, 12);
$angle2 = rand(-12, 12);
 
// Schrijf de Schaduw van de Captcha op de afbeelding.
// Het eerste getal (hier 25) is de grootte van de tekens die weggeschreven worden.
// Het tweede getal (hier 20) is de afstand in pixels dat de tekens van de rechterkant af weggeschreven worden.
// Het derde getal (hier 28) is de afstand in pixels dat de tekens van de bovenkant af weggeschreven worden.
imagettftext($im, 25, $angle1, 20, 28, $shadow, $font, $randomnr);
 
// Schrijf de Captcha Code op de afbeelding.
// Het eerste getal (hier 20) is de grootte van de tekens die weggeschreven worden.
// Het tweede getal (hier 30) is de afstand in pixels dat de tekens van de rechterkant af weggeschreven worden.
// Het derde getal (hier 32) is de afstand in pixels dat de tekens van de bovenkant af weggeschreven worden.
imagettftext($im, 20, $angle2, 30, 32, $front, $font, $randomnr);
 
// Voorkom dat de afbeelding ge-cached wordt door headers te versturen.
header("Expires: Wed, 1 Jan 1997 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
 
// Verzend de aangemaakte afbeelding naar de browser.
header ("Content-type: image/gif");
imagegif($im);
imagedestroy($im);
?>

 

 

Nu hebben we de Captcha afbeelding gemaakt en de Captcha code opgeslagen in een Session. Wat we nu nog moeten doen is het formulier maken waar de Captcha in geplaatst gaat worden. Hiervoor heb ik captcha_form.php gemaakt.

 

captcha_form.php

// SCRIPT GESCHREVEN DOOR STEVEN GROOTHUISMINK
// VOOR INFORMATIE NEEM CONTACT OP VIA TRAPPERDESIGN.COM
// BIJ GEBRUIK VAN DIT SCRIPT WORDT EEN LINK NAAR WWW.TRAPPERDESIGN.COM GEWAARDEERD
// ENJOY! STEVEN GROOTHUISMINK, -- WWW.TRAPPERDESIGN.COM -- 2009
 
 
 
 
// Schrijf het formulier weg in een Function.
// Dit maakt het makkelijker om na verzending van het formulier te controleren op fouten.
// Het voorbeeld formulier hier is vrij simpel met alleen een Naam vak en een Captcha vak.
function Form()
{
echo "
Captcha Test Formulier
  1. ' style='width: 200' />
";
}   // Controleer of het formulier al verzonden is of niet. // Als het formulier nog niet verzonden is laat het dan zien door de Form() Function aan te roepen. if (!isset($_POST['submit'])) { Form(); }   // Als het formulier wel verzonden is ga dan verder. else {   // Formulier controleren op fouten. // Stel de beginwaarde in op 0. $error = 0;   // Controle of de naam is ingevuld. // Als de Naam niet is ingevuld geef dan een Error waarschuwing (1). // Geef de foutmelding weer bij $errstr[] if(empty($_POST['naam'])) { $error = 1; $errstr[] = "Vul je naam in aub"; }   // Als er fouten zijn gevonden geef dan de foutmelding weer. if ($error == 1) { echo "\"refresh\" content=\"0; URL=#error\">";
echo "\n"; echo "

Foutmelding

\n"
;
echo "
    \"error\">\n"; foreach($errstr as $err) { echo "
  • " . $err . "
  • \n"
    ;
    } echo "\n
\n"
;
  // Laat het formulier nogmaals zien Form(); }   // Als er geen fouten zijn gevonden ga dan door met de volgende stap. else {   // Start de Session voor de Captcha code session_start();   // Controleer of de ingevulde Captcha code overeen komt met de Captcha code zoals die weergegeven werd. // Als de code overeen komt ga door en geef geen Error waarschuwing (0). if (md5($_POST['AntiSpam']) == $_SESSION['randomnr2']){ $Spam = 0; }   // Als de code niet overeen komt geef dan een Error waarschuwing (1). // Geef de foutmelding weer bij $errstr[] else{ $Spam = 1; $errstr[] = "Vul de juiste code van het plaatje in!"; }   // Als er een fout is gevonden geef dan de foutmelding weer. if ($Spam == 1) { echo "\"refresh\" content=\"0; URL=#error\">";
echo "\n"; echo "

Foutmelding

\n"
;
echo "
    \"error\">\n"; foreach($errstr as $err) { echo "
  • " . $err . "
  • \n"
    ;
    } echo "\n
\n"
;
  // Laat het formulier nogmaals zien Form(); }   // Als het formulier gecontroleerd is en geen fouten geeft ga dan door met de verwerking van de gegevens. else {   // Het bericht is verzonden en de zender wordt bedankt echo "

Hallo ".$_POST['naam'].", De Captcha code is juis ingevuld

De pagina wordt nu opnieuw geladen......

";
echo "\"refresh\" content=\"5; URL=captcha_form.php\">"; } }} ?>

Het laatste bestand dat je nodig hebt is een ttf bestand. Dit is de tekenset die je nodig hebt om de letters en cijfers voor de Captcha aan te maken. Je kunt een ttf bestand gratis downloaden van internet in de vorm die je zelf wilt. In het zip bestandje heb ik alvast een toegevoegd zodat je meteen aan de slag kunt met de scripts.

Ik hoop dat het commentaar dat ik bij de scripts heb gezet voldoende is om duidelijk te maken hoe het werkt en wat je zelf kunt veranderen. Veel plezier ermee!

Voor een werkende demo van dit script kijk bij het reactie formulier onder aan deze pagina. En kijk hier om te downloaden: captcha.zip


Home | Web | Category | Tags | Top Geplaatst onder: Websites . Tutorials .
Tags: PHP . Scripts . Captcha .

Reacties op: Captcha script met uitleg

  •  jjfj 1 maand geleden
      jjfj
    jaja
  •  Joop 2 maanden geleden
      Joop
    Mooi gedaan
  •  test 2 maanden geleden
      test
    test
  •  Loekie 2 maanden geleden
      Loekie
    Kijk eens aan.
    Hélemaal niet sjlèch!
  •  Sasha 10 maanden geleden
      Sasha
    Hallo,
    Mooi script! Dankjewel.
    Groetjes Sasha

NIEUWE REACTIE
  1. * Uw email adres wordt alleen gebruikt voor de Avatar. Voor de Avatars maakt deze website gebruik van Gravatar.com.

Archief


TrapperDesign.com

Bekijk mijn LinkedIn profiel Volg mij op Twitter   Facebook