Anuncio --->

May
02

captchaantispam.jpg

Preparé un ejemplo para mostrar algunas cosas de la librería gráfica GD de PHP. Es un captcha (Antispam) que hace una pregunta matemática simple. El flujo de un captcha es el siguiente.

  1. Se crea una imágen con la “pregunta”
  2. Se guarda la respuesta en una variable de sesión
  3. Se lee la respuesta humana del formulario y se la compara con la respuesta almacenada en la variable de sesión

El archivo captcha.php funciona como una imagen para el navegador. Y la idea es incluirlo en el formulario como si de una imágen se tratara: <img src=”captcha.php?.png” alt=”CAPTCHA” />

Cuando el navegador accede a este archivo se ejecuta todo el código que está dentro del mismo y además se crea una imagen que es la que finalmente muestra el navegador. Se puede ver el ejemplo funcionando aquí. y descargar el ejemplo completo aquí

Este es el código del archivo Captcha.php explicado.

session_start(); //Inicio una sesion
//genero los arrays con las posibilidades<br />
$operadora= array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17);
$operadorb= array("veces","mas", "mitades de");
$operadorc= array(2,4,6,8,10);
//randomicamente formo la pregunta
$a=rand(0,16);
$b=rand(0,2);
$c=rand(0,4);
$pregunta = $operadora[$a] . " " . $operadorb[$b] . " " . $operadorc[$c];
// resuelvo el resultado dependiendo del operador B
if ($b==0)
{
$resultado=$operadora[$a]*$operadorc[$c];
}elseif ($b==1)
{
$resultado=$operadora[$a]+$operadorc[$c];
}elseif ($b==2)
{
$resultado=$operadora[$a]*($operadorc[$c]/2);
}
//Guardo la respuesta correcta en una variable de session
$_SESSION['antispam'] = $resultado;
header("Content-type: image/png"); //envio la cabecera de imagen PNG. Hasta ahora no enviado nada al navegador. Si por ejemplo usara un echo la imagen no se mostraria
//Genero y muestro la imagen
// Creo una imagen imagecreate(ancho, alto), el ancho es la cantidad de caracteres de la pregunta multiplicado por 8 que son los pixeles aproximados por caracter
$im = @imagecreate(8*strlen($pregunta), 20) or die("algo anda mal");
//elijo el color de fondo de la imagen, en valores RGB
$background_color = imagecolorallocate($im, 255, 255, 255);
//Elijo el color del texto, en valores RGB
$text_color = imagecolorallocate($im, 233, 14, 91);
//Escribo en la imagen imagestring(imagen, tama&#241;o de fuente, posicion x, posicion y, texto, color)
imagestring($im, 3, 5, 5, $pregunta, $text_color);
//despliego la imagen y la quito de la memoria
imagepng($im);
imagedestroy($im);

Referencia a algunas funciones usadas

session_start() -> inicia o reabre una sesión
rand() -> Genera un número randomico
imagecreate() -> Crea un recurso de imagen
imagecolorallocate() -> Genera un recurso de color
imagestring() -> Agrega un texto a un recurso de imagen
imagepng() -> Despliega una imagen PNG
imagedestroy() -> destruye el recurso de imagen

Read more from the programacion, webmasters category. If you would like to leave a comment, click here: 1 Comment. or stay up to date with this post via RSS, or you can Trackback from your site.
Social Bookmark : Technorati, Digg, de.licio.us, Yahoo, Blinkbits, Blogmarks, Google, Magnolia.

Deje su comentario

Si desea dejar un comentario, rellene los siguientes campos.

Name (requerido)

Email (requerido)

Sitio Web

Comentarios

1 Comment so far
  1. matiasn Mayo 7, 2008 7:48 am

    MUY , PERO MUY , PERO MUY BUENO.
    Era lo que quería.. que lástima verlo luego de haber montado un captcha con imágenes….

    ya que lo hice les dejo el tutorial sobre

    como instalar un captcha

    espero que sirva .. me llevo varias horas :)




© Copyright graficopicante.com - Powered by Wordpress - Designed by Speckyboy. Enjoy with a Whopper Meal & Large Coke.