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?