Código CAPTCHA en PHP para identificar humanos

Muchas veces deseamos diferenciar si el usuario de una web es un bot o una persona, de manera que no permitiremos a los bots poner comentarios y hacer según que acciones. Así podemos evitar SPAM, registros automáticos, etc.

Para ello se usa el típico cuadro con una imágen que hay que copiar en un cuadro de texto.

Ésto es lo llamado CAPTCHA.

Aquí tenéis un CAPTCHA perfectamente funcional para una web PHP:

Fichero para incluir la comprobación, captcha.inc.php
<?php
session_start();
$captcha_texto = "";
$caracteres="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
for ($i = 1; $i <= 6; $i++) {
    mt_srand((double)microtime()*1000000);
    $valor_aleatorio = mt_rand(0,strlen($caracteres)-1);
    $captcha_texto .= $caracteres[$valor_aleatorio];
    }
$HTTP_SESSION_VARS["CAPTCHA"] = $captcha_texto;
unset($captcha_texto);
?>

Fichero que genera la imagen, captcha.img.php

<?php
//creamos la imagen definiendo el tamaño del alto y el ancho (140, 35)
$captcha_imagen = imagecreate(130,30);
//creamos el color negro para el fondo y blanco para los caracteres
$color_negro = imagecolorallocate ($captcha_imagen, 0, 0, 0);
$color_blanco = imagecolorallocate ($captcha_imagen, 255, 255, 255);
//pintamos el fondo con el cplor negro creado anteriormente
imagefill($captcha_imagen, 0, 0, $color_negro);
//iniciamos la session para obtener los caracteres a dibujar
session_start();
$captcha_texto = $HTTP_SESSION_VARS["CAPTCHA"];
//dibujamos los caracteres de color blanco
imagechar($captcha_imagen, 4, 10, 8, $captcha_texto[0] ,$color_blanco);
imagechar($captcha_imagen, 5, 30, 8, $captcha_texto[1] ,$color_blanco);
imagechar($captcha_imagen, 3, 50, 8, $captcha_texto[2] ,$color_blanco);
imagechar($captcha_imagen, 4, 70, 8, $captcha_texto[3] ,$color_blanco);
imagechar($captcha_imagen, 5, 90, 8, $captcha_texto[4] ,$color_blanco);
imagechar($captcha_imagen, 3, 110, 8, $captcha_texto[5] ,$color_blanco);
//indicamos que lo que vamos a mostrar es una imagen
header("Content-type: image/jpeg");
//mostramos la imagen
imagejpeg($captcha_imagen);
?>

Modo de uso (mifichero.php):

<?php
// Esto es para hacer la comprobacion:
session_start();
$ANTERIOR=$HTTP_SESSION_VARS["CAPTCHA"];

// Iniciamos CAPTCHA (genera el numero a comprobar)
include "comun/__captcha.inc.php";
?>
<p>Por favor ingrese el codigo que ve en la imagen, sino puede leerlo actualize la pagina.</p>
<p align="center"><img src="captcha.img.php" /></p>
<form method="POST">
<p>Ingrese el codigo:
<input name="CAPTCHA" type="text" size="30" />
<input type="submit" name="Submit" value="OK" />
</p>
</form>
<p><b>Nota: El codigo es sensible a las mayusculas y minisculas</p>
<!-- Esto es para ver como funciona: -->
<p>DESEADO: ""; INTRODUCIDO: ""</p>

Con estos dos archivos (el 3o es un ejemplo de uso) tendréis un sistema CAPTCHA completamente montado.


    Editado por Daniel el 27/05/2008 a las 11:39:08h.