<?php
#	Door: Pieter van Linschoten
#	Datum: 7 Maart 2007
#	E-mail: webmaster @ lapidi . nl
#	Website: http://www.lapidi.nl
#	Tevens origineel beschikbaar:  www.phphulp.nl
#	Rechten: GNU General Public Licence
#	Voorbeeld: http://www.lapidi.nl/captcha.php

session_start();

// Bepaal of script de code moet verwerken of nieuwe code aanmaken
if(!isset($_GET['action'])){

	// Initialiseer array digits.
	$digits = array();
		$digits[0] = 'A';	$digits[1] = 'B';	$digits[2] = 'C';
		$digits[3] = 'D';	$digits[4] = 'E';	$digits[5] = 'F';
		$digits[6] = 'G';	$digits[7] = 'H';	$digits[8] = 'I';
		$digits[9] = 'J';	$digits[10] = 'K';	$digits[11] = 'L';
		$digits[12] = 'M';	$digits[13] = 'N'; 	
		$digits[14] = 'P';	$digits[15] = 'Q';	$digits[16] = 'R';
		$digits[17] = 'S';	$digits[18] = 'T';	$digits[19] = 'U';
		$digits[20] = 'V';	$digits[21] = 'W';	$digits[22] = 'X';
		$digits[23] = 'Y';	$digits[24] = 'Z';	$digits[25] = '1';
		$digits[26] = '2';	$digits[27] = '3';	$digits[28] = '4';
		$digits[29] = '5';	$digits[30] = '6';	$digits[31] = '7';
		$digits[32] = '8';	$digits[33] = '9'; 
		// Om verwarring te voorkomen 0 en O niet inbegrepen.


	$iDigits = 8; // Uit hoeveel tekens moet de Captcha bestaan?

	// Initialiseren van variabelen. Strings (v) en Integers (i). 
	// Ik zet er ook bij waarovor ik ze gebruik. Dit om latere verwarring te vermijden.

	$iRand = 0;		// Random integer: Bepaald welk teken in de captcha komt
	$iCount = 0;	// Forloop teller
	$vChars = NULL; // String die captcha bijhoud
	$Char = NULL;	// Enkele nummer, verandert steeds
	$vNum = NULL;	// Alle nummers uit de captcha achter elkaar
	$iNum = 0;		// Telt nummers
	$vLetter = NULL;// Alle letters uit de captcha achter elkaar
	$iLetter = 0;	// Telt letters
	$iAction = 0;	// Random integer: Bepaald welke vraag wordt gesteld
	$vAnswer = NULL;// String met antwoord op desbetreffende vraag
	$vQuestion = NULL;// String met eerste gedeelte van de vraag
	$_SESSION['sAnswer'] = NULL; // Sessievariabele met het antwoord

	// Selecteer $iDigits maal een RANDOM string en stel de antwoorden voor de mogelijke vragen samen.
	for($iCount=0;$iCount<$iDigits;$iCount++){
		$iRand = rand(0,count($digits)-1); 
		$Char = $digits[$iRand];
		$vChars .= $Char;
		if(is_numeric($Char)){ 
			// Houdt cijfers in de captcha achter elkaar en aantal cijfers bij
			$vNum .= $Char;
			$iNum++;		
		}else{
			// Houdt letters in de captcha achter elkaar en aantal letters bij
			$vLetter .= $Char; 
			$iLetter++;
		}
	}

	// Bepaal wat voor vraag er wordt gesteld, om bots te verwarren.
	$iAction = rand(0,3);

	switch($iAction){
		case 0: 
			$vQuestion = 'Hoeveel cijfers';
			$vAnswer = $iNum;
			break;
		case 1:
			$vQuestion = 'Hoevel letters ';
			$vAnswer = $iLetter;
			break;
		case 2:
			$vQuestion = 'Welke cijfers';
			$vAnswer = $vNum;
			break;
		case 3:
			$vQuestion = 'Welke letters';
			$vAnswer = $vLetter;
		break;
	}

	// Sla het antwoord op in een sessie, die afgeschermt zijn voor bots.
	$_SESSION['sAnswer'] = $vAnswer;

	// Captcha + Vraag
	echo "<p><b>" . $vChars . "</b></p>";
	echo "<p><u>" . $vQuestion . "</u> bevat het bovenstaande dikgedrukte gedeelte?</p>";
	
	// Formuliertje:
	echo "<form method=post action='". $_SERVER['PHP_SELF'] ."?action=check'>";
	echo "<input type='text' name='code'";
	echo "<input type='submit' value='Controleer'>";
	echo "</form>";
	echo "<p>N.B.: Alle tekens moeten op volgorde van links naar rechts en zijn hoofdlettergevoelig!</p>";

}else{
	
	// Mogelijke verwerking:
	
	// Controleer of de variabele niet leeg is.
	if(empty($_SESSION['sAnswer'])){
		echo "<p><b>Helaas!</b> Er is geen geldig antwoord, aangezien er niets is gevraagd.</p>"; // Lege string > foutmelding
	
	// Kijk of het antwoord klopt.
	}elseif($_SESSION['sAnswer'] == $_POST['code']){
		echo "<p><b>Goed!</b> Je bent een mens of een HELE slimme bot!</p>"; // Goed antwoord > Hier moet dus de verwerking komen!
	
	// Indien fout antwoord.
	}else{
		echo "<p><b>Helaas!</b> Geen toegang voor BOTS en Analfabeten!</p>"; // Fout antwoord > foutmelding
	}
	
	// Altijd handig om het nogmaals te proberen :)
	echo "<p><a href='" . $_SERVER['PHP_SELF'] . "'>Vorige</a></p>";
	session_destroy();
}
?>