Los CAPTCHA o Completely Automated Public Turing test to tell Computers and Humans Apart (Prueba de Turing pública y automática para diferenciar a máquinas y humanos) son aquellas imagen con caracteres que aparecen en los formularios para detectar cuando el formulario es llenado por un humano o por un bot (programa especial para automatizar procesos)
El Formulario
Lo primero que necesitamos para mostrar un CAPTCHA es crear aleatoreamente la secuencia de caracteres que va aparecer en la imagen y guardarla en una variable de session ($_SESSION) para comprobarla luego con la ingresada por el usuario...
<?
session_start();
$captcha_texto = "";
for ($i = 1; $i <= 6; $i++) {
$captcha_texto .= caracter_aleatorio();
}
$HTTP_SESSION_VARS["captcha_texto_sessi
on"] = $captcha_texto;
function caracter_aleatorio() {
mt_srand((double)microtime()*1000000);
$valor_aleatorio = mt_rand(1,3);
switch ($valor_aleatorio) {
case 1:
$valor_aleatorio = mt_rand(97, 122);
break;
case 2:
$valor_aleatorio = mt_rand(48, 57);
break;
case 3:
$valor_aleatorio = mt_rand(65, 90);
break;
}
return chr($valor_aleatorio);
}
?>
Luego insertamos el formulario...
<p>Captcha: Formularios mas seguros.</p>
<hr size="1" noshade="noshade" />
<p>Por favor ingrese el codigo que ve en la imagen, sino puede leerlo actualize la pagina.</p>
<p align="center"><img src="crear_imagen.php?<?php echo SID; ?>" /></p>
<form action="verificar.php" method="POST">
<p>Ingrese el codigo:
<input name="texto_ingresado" type="text" id="texto_ingresado" size="30" />
<input type="submit" name="Submit" value="OK" />
</p>
</form>
<p
>
Nota: El codigo es sensible a las mayusculas y minisculas</p>
Notemos el código en negrita, la forma de llamar a la imagen es "dinámica" osea no estamos llamando directamente a la imagen sino que llamamos a un script php que crea la imagen dinámicamente basandose en la secuencia de caracteres creada anteriormente.
La imagen
Ahora en el archivo "crear_imagen.php" debemos crear la imagen mostrando los caracteres creados anteriormente y guardados en una variable de session...
<?
//creamos la imagen definiendo el tamaño del alto y el ancho (150, 40)
$captcha_imagen = imagecreate(150,40);
//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_texto_sessi
on"];
//dibujamos los caracteres de color blanco
imagechar($captcha_imagen, 4, 20, 13, $captcha_texto[0] ,$color_blanco);
imagechar($captcha_imagen, 5, 40, 13, $captcha_texto[1] ,$color_blanco);
imagechar($captcha_imagen, 3, 60, 13, $captcha_texto[2] ,$color_blanco);
imagechar($captcha_imagen, 4, 80, 13, $captcha_texto[3] ,$color_blanco);
imagechar($captcha_imagen, 5, 100, 13, $captcha_texto[4] ,$color_blanco);
imagechar($captcha_imagen, 3, 120, 13, $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);
?>
Verificar
Ahora lo que nos queda por delante es verificar que el código ingresado por el usuario coincida con el CAPTCHA creado, esto lo hacemos en el archivo "verificar.php"...
<?
session_start();
$texto_ingresado = $HTTP_POST_VARS["texto_ingresado"];
$captcha_texto = $HTTP_SESSION_VARS["captcha_texto_sessi
on"];
if ($texto_ingresado == $captcha_texto) {
echo "Usted ingreso el codigo correctamente.";
} else {
echo "El texto ingresado no coincide. Por favor intentelo de nuevo!";
}
session_unset();
session_destroy();
?>
Autor: Mauro Rondinelli
http://www.elguruprogramador.com.ar/usuarios/perfil.asp?id=1