Scripts
Simpele zwart / wit captcha
Dit script genereerd een plaatje met een random "numerieke" code die correct dient worden overgenomen om bijv: Een formulier te submitten. Het is een vrij simpele captcha. Het maakt gebruik van witte cijfers en witte lijnen met een zwarte achtergrond. Ik heb er veel commentaar in verwerkt zodat ook de beginnende PHP-er dit script goed kan begrijpen. Gaarne reacties van wat beter kan, zodat ik er ook weer van kan leren :) Mvg, Erik
simpele-zwart-wit-captcha
[i]captcha.php[/i]
[code]<?
// We willen graag alle fouten / notices zien
ini_set('display_errors', 1);
error_reporting(E_ALL);
// We laten het script weten dat we met sessies gaan werken
session_start();
// We laten het script weten dat we een plaatje gaan maken
header('Content-type: image/png');
// We defineren een aantal variabelen
$aantal_karakters = 4;
$lijnen = 6;
$fonts =
array(
'times.ttf',
'tahoma.ttf',
'verdana.ttf'
);
// We gaan een captcha maken met enkel getallen
$karakters = range(1, 9);
// We maken een lege variabele aan waar we de code in gaan zetten straks
$captcha_code = NULL;
// We maken een for loop om een random 4 cijferige code te maken
for($random_code = 0; $random_code < $aantal_karakters; $random_code++)
{
// we pakken random getallen uit de array $karakters, we halen er 1 vanaf aangezien een array begint bij 0;
$random = mt_rand(0, count($karakters) -1);
// we stoppen de gegenereerde code in de variabele $captcha_code
$captcha_code .= $karakters[$random];
}
// we zetten een sessie met de code en encrypten die met sha1();
$_SESSION['captcha_code'] = sha1($captcha_code);
// we geven de breedte van de afbeelding op
$breedte = $aantal_karakters * 20;
// we geven de lengte van de lijnen op
$lijn_lengte = $breedte;
// we maken het plaatje aan
$image = imagecreatetruecolor($breedte, 45);
// we maken een for loop for de random lijnen
for($i = 0; $i < $lijnen; $i++)
{
// alle lijnen maken we wit
$kleur = imagecolorallocate($image, 255, 255, 255);
imageline($image, mt_rand(2, $lijn_lengte), 1, mt_rand(2, $lijn_lengte), 44, $kleur);
}
// we maken een for loop voor de letters
for($i = 0; $i < $aantal_karakters; $i++)
{
// we geven alle we maken alle letters wit
$kleur = imagecolorallocate($image, 255, 255, 255);
// we zetten de letters op de juiste plaats
$plaats = $i * 16 + 6;
imagettftext($image,
19,
mt_rand(-20,20), //willekeurige rotatie
$plaats, //plaats horizontaal
mt_rand(20,40), //random plaats verticaal
$kleur, //willekeurige kleur
$fonts[array_rand($fonts)], //willekeurig lettertype
$captcha_code[$i]); //met de letter
}
imagepng($image);
imagedestroy($image);
?>[/code]
[i]index.php[/i]
[code]<?
// We willen op de hoogte gehouden worden van alle errors / notices
ini_set('display_errors', 1);
error_reporting(E_ALL);
// we gaan met sessies werken
session_start();
?>
<html>
<head>
<title></title>
</head>
<body>
<?
// controlen of het formulier gesubmit is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(!empty($_POST['captcha_code']) && sha1($_POST['captcha_code']) == $_SESSION['captcha_code'])
{
echo 'De code is correct, Gefeliciteerd!';
}
else {
echo 'De ingevoerde code is niet juist, Flauwerd!';
}
}
else {
echo '
<form method="post" action="'.$_SERVER['PHP_SELF'].'">
<p>
<img src="captcha.php" />
</p>
<p>
Neem de code precies zo over zoals aangegeven hierboven.<br />
<label for="captcha_code">Code:</label>
<input type="text" name="captcha_code">
</p>
<p>
<input type="submit" name="submit" value="Controleer">
</p>
</form>
';
}
?>
</body>
</html>[/code]
Reacties
0