Check no Computer

5 04 2010

Hace algún tiempo, en otro blog, dije que publicaría mi versión de un captcha.
Hay muchas paginas que usan recaptcha y muchas que usan versiones propias de captcha de texto, ademas de algunas que usan captcha de sumas pero con texto.

Este ejemplo muestra sumas o restas en una imagen y guarda la respuestas en una sesion, para poder comprobar la respuesta.

check_no_computer.php

<?php
if($_GET['img']<>''){session_start();}//si es imagen. necesita esto para la  cookie
$sumaoresta = rand(0,1);
$signo = ' + ';
if ($sumaoresta == 0){//resta
	$sumaoresta = -1;
	$signo = ' - ';
}
$valorA = rand(5,15);
$valorB = rand(1,$valorA);
$respuesta = $valorA+($sumaoresta*$valorB);
$_SESSION['notroll'] = md5('PON_ALGO_AQUI' . $respuesta);
$textoimagen = $valorA . $signo . $valorB;

if($_GET['img']<>''){
	$ancho=100;
	$alto=30;
	$imagen=imagecreate($ancho,$alto);
	$imagen=imagecreatefrompng("nsbg.png");
	$txtcolor[0]=imagecolorallocate($imagen,54,126,160);
	$txtcolor[1]=imagecolorallocate($imagen,137,217,017);
	$txtcolor[2]=imagecolorallocate($imagen,248,80,007);
	$txtcolor[3]=imagecolorallocate($imagen,097,023,179);
	$txtcolor[4]=imagecolorallocate($imagen,097,023,179);
	$txtcolor[5]=imagecolorallocate($imagen,145,145,145);
	$txtcolor[6]=imagecolorallocate($imagen,230,178,053);
	$txtcolor[7]=imagecolorallocate($imagen,166,061,174);
	$txtcolor[8]=imagecolorallocate($imagen,093,134,139);
	$txtcolor[9]=imagecolorallocate($imagen,104,91,065);
	$x=11; $y=20;
	$blanco=imagecolorallocate($imagen,250,250,250);
	$limitesx=$ancho-4;$limitesy=$alto-4;
	for($i=0; $i<strlen($textoimagen); $i++){
		$indaz=rand(0,9);//color
		$angle=rand(-10,10);
		imagettftext($imagen,16,$angle,$x,$y,$txtcolor[$indaz],"ROCKEB.TTF",$textoimagen[$i]);
			if($textoimagen[$i]<>" "){
 			$xline1=rand($x-3,$x);
  			$yline1=rand(2,$limitesy);
  	 		$xline2=rand($x+3,$limitesx);
  	 		$yline2=rand(2,$limitesy);
  	 		ImageLine($imagen,$xline1,$yline1,$xline2,$yline2,$blanco);
			}
		$x=$x+12;
	}
	header('Content-type: image/png');
	Imagepng($imagen);
	Imagedestroy($imagen);

}
else{
	echo $textoimagen." = ".$respuesta;
}
//requisito:saber contar hasta 30
?>

formulario

<br>
<form method="POST" action="test_my_captcha.php">
Answer this:<br>
<img src="check_no_computer.php?img=1"><input type="text" name="captcha" size="4"  maxlength=50 autocomplete="off" value=""  style="position:relative;top:-8px;font-family:Arial;font-size:20px;">	<br>	<input type=submit value='Check'></form>

test_my_captcha.php

<?php
session_start();
$mynotrolla = $_SESSION['notroll'];$mynotrollb = md5('PON_ALGO_AQUI' . $_POST["captcha"]);
if($mynotrolla <> $mynotrollb){ 
echo '<span class="action_fail">Bad captcha.</span><br>';  
} else{
echo '<span class="action_done">OK.</span><br>'; 
}
?>

Importante:

  • modificar “PON_ALGO_AQUI” en ambos archivos.
  • Agregar estos archivos al directorio que contenga los scripts:
    ROCKEB.TTF
    nsbg.png

Donde Probarlo? deja un comentario en http://www.apuntesfcr.tk (plataforma de micriblogging pronto disponible(obvio que sin la parte móvil, o hasta que encuentre algo que permita generar una pagina WAP rápido))

Anuncios

Acciones

Information

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s




A %d blogueros les gusta esto: