Crear sistema de Captcha en PHP

12 Replies

General Programación

En este tutorial os enseñaremos a construir nosotros mismos un sistema captcha en PHP para evitar el spam en las webs.

Crear sistema CAPTCHA

El sistema está construido en PHP y para que funcione es necesario activar las librerías GD en nuestro servidor.

1º Lo primero es crear la imagen de fondo que intentará evitar que sistemas automáticos puedan leer el contenido del mismo.
La imagen será formato PNG con las medidas 100×42 con el nombre de fcaptcha.png, nosotros hemos creado la siguiente:

Fondo del Captcha

2º Creación del sistema que genera automáticamente el captcha, para ello necesitaremos insertar  las siguientes lineas en un archivo que lo llamaremos captcha.php


<?
session_start();
$string = substr(md5(microtime() * mktime()),0,4);
$captcha = imagecreatefrompng("fcaptcha.png");
$clinea = imagecolorallocate($captcha,63,63,63);
$ccolor = imagecolorallocate($captcha, 0, 0, 63);
imageline($captcha,55,0,4,40,$clinea);
imageline($captcha,0,0,35,15,$clinea);
imageline($captcha,40,0,64,24,$clinea);
imageline($captcha,0,10,70,38,$clinea);
imagestring($captcha, 10, 30, 10, $string, $ccolor);
$_SESSION['CAPTCHA'] = $string;
header("Content-type: image/png");
imagepng($captcha);
?>

3º Ahora crearemos otro archivo llamado comprobar.php con las siguientes líneas

<?
session_start();
if (isset($_POST['Enviar'])) {
if( $_SESSION['CAPTCHA'] != $_POST['introducido'])
{
exit('Te has confundido introduciendo el código');
}
echo "Código Correcto!";
}
else {
echo "ERROR";
}
?>

4º Este es el último paso y el más sencillo, que sería crear un formulario HTML que represente los datos y los envié. El código que nosotros hemos utilizado ha sido el siguiente:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<form action="comprobar.php" method="post"> <img src="captcha.php" alt=""> <br>
¿Eres humano? <input name="introducido" type="text"> <input name="Enviar" value="Enviar" type="submit"> </form>
</body>
</html>

Y con estos 3 archivos tendríamos listo nuestro captcha casero pero de muy buena calidad.

El resultado sería el siguiente:

¿Eres humano?

12 comments

  1. Luis

    Hola deseo saber lo siguiente: el ultimo paso, la creación del formulario, te refieres a la creación del formulario para agregar el código, mas no así al formulario del mensaje como por ejemplo: Nombre, telefono, email, dirección y cuerpo del mensaje (que se quiere enviar). Como se inserta el formulario de captcha en un formulario de envío de mensajes?. te agradeceré tu ayuda.

    1. Antonio Post author

      Hola Luis, el 4º paso me refiero a crear el formulario en HTML pudiéndose añadir los campos que quieras.
      Para añadirlo hay varias formas, pero la más sencilla sería hacerlo en el comprobar.php en vez de mostrar “Codigo correcto” meter hay el código del formulario.

      Otra forma sería a través con if, elseif…. pero te sería más complicado.

      Saludos

Deja un comentario