Icono del sitio Tursos

Como Hacer un Sistema Captcha con PHP

En este tutorial haremos una función en PHP que generara una seria de letras y números elegidos de manera aleatoria y las plasmara en una imagen, para luego en un formulario hacer la comparación de la imagen generada con lo que el usuario vea e ingrese.

Los códigos captcha empezaron a utilizare en el año 2000 para evitar que los robots puedan registrarse en cuentas de correo electrónicos, foros, portales o participar en encuestas, que solo el humano puede hacerlo.

Vamos a trabajar con dos archivos, captcha.php e index.php en el primero se generara la imagen aleatoria y en el segundo se comparara la imagen generada con lo que el usuario ingrese en la caja de texto:

1. captcha.php

Iniciamos session y creamos una función que generara los números y letras aleatorios.
Luego en $cadena declaramos los números y letras para que la imagen generada obtenga su contenido.

Después en un for generamos la cadena de números/letras de manera aleatoria con la función rand.

<?php
session_start();
function texto($ancho)
{
     $cadena = "0123456789abcdefghijkmnñlopqrstwxyz";
     for($i = 0; $i<$ancho;$i++)
     {
          $muestra .= $cadena{rand(0,35)};
     }
	 return $muestra;
}

Ahora creamos una variable de session que nos permita guardar el texto que se utilizara en el captcha, donde llamaremos la funcion texto() creada anteriormente, tambien debemos definir una imagen de fondo donde se plasmara el texto generado.

// Define el ancho del texto usando un parametro (5) para la función creada anteriormente.
$_SESSION['captcha'] = texto(5);

// La imagen gif de fondo.
$captcha = imagecreatefromgif("imagen.GIF");

// La localizacion de la imagen, lo dejamos en 0,0,0
$letras = imagecolorallocate($captcha,0,0,0);

// Unir el texto en la imagen gif creada.
imagestring($captcha,5,16,7,$_SESSION['captcha'],$letras);

// Pone la imagen en cabezera.
header("Content-type: image/gif");

// Muestra la imagen.
imagegif($captcha);
?>

2. index.php

Ahora creamos el formulario donde colocaremos la imagen del captcha con un campo de texto donde se ingresa el texto y se compara con la variable de session que se creó en que parte de arriba, la imagen se coloca de la manera siguiente.

Primero colocamos el código PHP, iniciamos sesión y declaramos $code que es el valor de lo que se ingrese en la caja de texto del formulario que haremos a continuación.

Luego preguntamos si se presiono o no el boton de enviar, dentro de este if hacemos otro if donde comparamos el valor de la variable de sesión con el valor de lo que el usuario ingreso en la caja de texto y mostramos las respuestas correspondientes.

<?php
session_start();
$code = trim($_POST['code']);
if(isset($_POST['save']))
	{
		if($_SESSION['captcha'] == $code)
		{
			echo "<span style='color:green'>Es correcto el captcha ingresado</span>";
		}
		else
		{
			echo "<span style='color:red'>Es incorrecto el captcha ingresado</span>";
		}	
	}
?>

Ahora creamos el formulario, prestad atención a la etiqueta img donde en src llamamos al archivo captcha.php que creamos al principio.

<form  name="form1" method="post" action="">
   <img src="captcha.php" width="100" height="30" vspace="3"><br /> 
   <input name="code" type="text"/><br />
<input type="submit" name="save" value="Enviar"><br />
</form>