Originariamente inviato da marketto
Ciao a tutti, avete mai sentito parlare di "
captcha" (Rif.1)?? Essa rappresenta l'acronimo di "
completely
automated
public
Turing test to tell
computers and
humans
apart", ovvero la capacità di distinguere l'utente dal robot in base alla sua capacità di riconoscere, in una immagine, un testo scritto con caratteri di fantasia, continuamente diversi, e modificati con l'aggiunta di rumore casuale. (Rif.2)
Queste poche righe di codice rappresentano un primo approccio, forse minimo, al problema in oggetto. Sono disponibili infatti in rete molte classi, con un numero maggiore di funzioni, riguardarti i
captcha.
Da notare inoltre come questo tipo di controlli introduca dei problemi di accessibilità nei confronti di alcuni utenti (Rif.3).
--------------------------
riferimenti sul web:
Rif.1 ->
http://www.captcha.net/
Rif.2 ->
http://www.webegg.it/ita/capireilfut...bergadano8.htm
Rif.3 ->
http://www.linux.it/~claudio/w3c/TR/turingtest/
--------------------------
file prova.php
codice:
<?php
error_reporting(E_ALL);
require_once('captcha.class.php');
session_start();
$captcha=new captcha();
$act=isset($_GET['act']) ? $_GET['act'] : '';
switch($act):
case('img'):
$captcha->offuscamento=3;
$captcha->genera($_GET['stringa']);
break;
case('check'):
if($_SESSION['stringa'] == $_POST['codice']){
echo 'nome: '.$_POST['nome'];
echo '
';
echo 'cognome: '.$_POST['cognome'];
} else
echo 'Il codice non corrisponde all\'immagine';
break;
default:
$stringa=$captcha->stringa_casuale();
$_SESSION['stringa']=$stringa;
echo '<form method="post" action="'.$_SERVER['PHP_SELF'].'?act=check">
<ul style="list-style: none;">
[*]nome: <input type="text" name="nome" />
[*]cognome: <input type="text" name="cognome" />
[*]codice: [img]'.$_SERVER['PHP_SELF'].'?act=img&stringa='.$stringa.'[/img]
[*]inserisci il codice: <input type="text" name="codice" />
[*]<input type="submit" name="invia" value="invia" />
[/list]
</form>';
break;
endswitch;
?>
--------------------------
file
captcha.class.php
codice:
<?php
// Marco Barcaro
// 22/03/2005
//
// questa classe richiede le librerie grafiche GD
//
// Testato con Apache 1.3.33, PHP 4.3.10, GD 2.0.28 su winXP
class captcha {
var $offuscamento = '';
function captcha(){
$this->x=110;
$this->y=30;
$this->font='arial.ttf';
$this->dimensione=20;
}
function stringa_casuale(){
return chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90)) . chr(rand(65,90));
}
function genera($stringa){
$im=imagecreate($this->x,$this->y);
$bianco=imagecolorallocate($im, 255, 255, 255);
$nero=imagecolorallocate($im, 0, 0, 0);
$box=imagettfbbox($this->dimensione, 0, $this->font, $stringa);
imagettftext($im, $this->dimensione, 0, 5, 5+abs($box[5]), $nero, $this->font, $stringa);
$this->offuscamento=$this->offuscamento != NULL ? $this->offuscamento : 0;
$max=ceil(($this->x * $this->y * $this->offuscamento) / 30);
for($i=0;$i<$max;$i++){
$temp_x=rand(1,$this->x);
$temp_y=rand(1,$this->y);
imageline ($im, $temp_x, $temp_y, $temp_x, $temp_y, $nero);
}
for($i=1;$i<$this->y;$i=$i+10){
imageline ($im, 0, $i, $this->x, $i+5, $nero);
}
for($i=1;$i<$this->x;$i=$i+10){
imageline ($im, $i, 0, $i+5, $this->y, $nero);
}
header("content-type: image/jpeg");
imagejpeg($im,"",80);
imagedestroy($im);
}
}
?>