jun 13, 2009

Enviado por en PHP, Programacion

Creando un CAPTCHA

Pués debido a mi entrada anterior, me gustaria dar a entender como se crean imagenes con PHP y para que nos sirven

Captcha es el acrónimo de Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar a máquinas y humanos).

El codigo (captcha.php)

Primero que nada, el codigo (diferente al de la entrada anterior):

session_start();

$string = substr(md5(microtime() * mktime()),0,3);
$captcha = imagecreatefrompng("fondo.png");
$color = imagecolorallocate($captcha, 0, 0, 63);
$linea = imagecolorallocate($captcha,63,63,63);
imageline($captcha,0,0,39,29,$linea);
imageline($captcha,55,0,0,29,$linea);
imageline($captcha,40,0,64,29,$linea);
imagestring($captcha, 5, 10, 5, $string, $color);
$_SESSION['CAPTCHA'] = $string;
header("Content-type: image/png");
imagepng($captcha);

Básicamente lo que hace esto, es crear una imagen mediante GD a partir de una imagen PNG existente (60×25), después de eso añadirle lineas para confundir a un bot, y crear un texto basado a partir del MD5 del tiempo y usamos la función substr para sacar el numero maximo de caracteres 3 en este caso y finalmente, define la sesión creada al principio bajo el nombre de “CAPTCHA” para ser usado en un formulario posteriormente.

Esta es la imagen usada:
fondo

La prueba (formulario.html y prueba.php)

Ahora les mostrare un formulario muy sencillo para que vean como implementarlo a su formulario.

El HTML


<form action="prueba.php" method="POST"><img src="captcha.php" alt="" />
Introduce el Código

<input name="introducido" type="text" /> <input name="Enviar" type="submit" value="Enviar" /> </form> 

Como pueden ver, se inserta el captcha.php como una imagen y se crea un input con el nombre deseado (en este caso introducido) para despues comparar el POST del formulario con la sesión del CAPTCHA

Aqui esta el “motor” del formulario” (llamado prueba.php)


<?
 session_start();
if (isset($_POST['Enviar'])) {

if( $_SESSION['CAPTCHA'] != $_POST['introducido'])
{
exit('Codigo Erroneo');
}
echo "Codigo Correcto";
}

else {
echo "No accedas directamente a esta pagina.";
}
?>

Ahora si, compara con una función if, la sesión CAPTCHA con lo escrito en el formulario en el campo nombrado introducido

A continuación el ejemplo.

    Posts Relacionados

    1. Hola, yo lo estoy usando pero recibi reportes de que no funciona bien en internet explorer… ¿Alguna idea?

      Usando Safari 4.0.5 Safari 4.0.5 en Mac OS X 10.6.3 Mac OS X 10.6.3
      • Seguramente es porque el servidor tiene desactivada la opcion header, y por lo mismo no puedes indicar que es una imagen, provocando que no se muestre la imagen apropiadamente.

        Aunque ten en cuenta que todo el contenido de kernelerror es con motivo EDUCACIONAL, y no se supone que sea usado en sitios webs – mas info en avisos legales

        Usando Firefox 3.6.3 Firefox 3.6.3 en Windows 7 Windows 7
    2. Cualquier iamgen, de fondo? Claro!, solamente si es un gif en la linea 2 cambialo por, create FROM gif envez de createfrompng

      Usando Unknown Unknown en Unknown Unknown
    3. ¡Gracias! cualquier sugerencia de tema, por favor ahórranos proceso mental, enviándola al apartado de Contacto (pestañas superiores, la última)

      Usando Unknown Unknown en Unknown Unknown

    Dejar una respuesta

    Debes ser Alojarse para enviar un comentario.