En este tutorial os enseñaremos a construir nosotros mismos un sistema captcha en PHP para evitar el spam en las webs.
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:
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?
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.
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
No me funcionó, en vez de la imagen me sale un cuadro con una X y sí, yo subí la imagen captcha.png al directorio raíz y al directorio images pero no sirvió…
Comprueba que tengas instalada la libreria GD y que esté activada en el archivo php.ini
Saludos.
gracias men me funciono al 100, pero una duda se puede aumentar el numero de caracteres de la imagen que sean 5 o 6 digitos en ves de 4?
Debes cambiar la linea
$string = substr(md5(microtime() * mktime()),0,4);
por:
$string = substr(md5(microtime() * mktime()),0,6);
o la cantidad de caracteres que quieres que aparezcan.
Saludos
yo active en el php.ini la seccion del gd pero igual sigue sin salirme
porque sera??
Hola, solamente que hayas activado la opción no es suficiente. Tambien es necesario que la libreria GD esté en el servidor.
Saludos
Muchas gracias por fin despues de tanto leer este post lo ah hecho posible
Muy bueno el código me funciono, gracias.
Fiera, muchas gracias!!! No sabes como se agradecen estos tutos, de verdad Genial. Nuevamente, Muchas Gracias!
Me alegro que te haya sido de utilidad!!! y gracias a ti por visitar el blog.
Saludos!!