Creare un captcha è semplice; bastano due procedimenti:
- Creare l’immagine con il codice di verifica scritto sopra.
- Creare il form che verificherà che il codice immesso in un campo input corrisponda al codice visualizzato nell’immagine.
Iniziamo con la parte più complessa (complesso solo perchè la seconda parte è semplicissima:) : la creazione dell’immagine. Per la creazione dell’immagine usiamo le librerie gd2 di php. Pe prima cosa creiamo un codice di un tot di lettere, a caso sfruttando le funzioni md5() rand() e substr(), e lo memorizziamo in sessione, ciò ci servirà dopo per verificare che ilcodice immesso dal visitatore sia corretto. La seconda cosa da fare è creare l’immagine con le funzioni della gd2; il codice che uscirà dovrebbe essere simile a questo:
<?php
session_start();
header(”Content-type: image/png”);
$x = 150;
$y = 45;
$code = substr(md5(rand()),0,6);
$_SESSION[’code’]=$code;
$space = $x / (strlen($code)+1);
$img = imagecreatetruecolor($x,$y);
$bg = imagecolorallocate($img,255,255,255);
$border = imagecolorallocate($img,0,0,0);
$colors[] = imagecolorallocate($img,128,64,192);
$colors[] = imagecolorallocate($img,192,64,128);
$colors[] = imagecolorallocate($img,108,192,64);
imagefilledrectangle($img,1,1,$x-2,$y-2,$bg);
imagerectangle($img,0,0,$x-1,$y-2,$border);
for ($i=0; $i< strlen ($code); $i++)
{
$color = $colors[$i % count($colors)];
imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*
$space,35+rand(0,10),$color,’comic.ttf’,$code{$i});
}
for($i=0;$i<400;$i++)
{
$x1 = rand(3,$x-3);
$y1 = rand(3,$y-3);
$x2 = $x1-2-rand(0,8);
$y2 = $y1-2-rand(0,8);
imageline($img,$x1,$y1,$x2,$y2,$colors[rand(0,count($colors)-1)]);
}
imagepng($img);
?>
Da notare quel comic.ttf, che andrà sostituito col font che vogliamo usare.Il file ttf scelto dovrà stare nela stessa directory del file captcha.
Fatto ciò salviamo il tutto in un file php, che per comodità da adesso chiamerò captcha.php.
Dopodichè dobbiamo creare il file che permetta di inserire il captcha e il relativo codice, e che permetta di verificare che il codice inserito sia corretto.
Per comodità mettiamo tutto in un’unica pagina.
Con un if controlliamo la variabile $_GET[’codice’] contenuta nell’url:
se non è settata allora mandiamo alla schermata dove è contenuta l’immagine col codice captcha e con il campo input per l’inserimento del codice, altrimenti se è settata controlliamo il codice inserito dall’utente per vedere se corrisponde all’ultimo captcha memorizzato in sessione.
Quindi dovrebbe uscire un qualcosa del genere:
<?php
session_start();
if(!isset($_GET[’codice’])){
echo(”<img src=\”captcha.php\” alt=\”Captcha\” /><br />\n<form method=\”get\” action=\”".$_SERVER[’PHP_SELF’].”\”>\nInserisci il codice nell’immagine!<input type=\”text\” name=\”captcha\” />\n<br /><input type=\”submit\” value=\”Controlla\” />\n</form>”);
}else{
if($_GET[’captcha’]==$_SESSION[’code’]){
echo(”Il codice inserito è corretto”);
}else{
echo(”Il codice inserito è incorretto”);
}
}
?>
Ok, ora salviamo questo file con un nome qualsiasi (Es. controllo.php) eseguiamolo ed ecco il nostro captcha pronto all’uso, ecompletamente modificabile!
Alla prossima 