Hola amigos de la comunidad de Taringa!, pues acá les traigo un simple sistema de captcha que he creado hace un rato para una página web de mi Universidad desarrollada desde 0.
Bueno a continuación les dejo los 3 archivos que hacen de este sistema funcional:
Imagen:
Nota: Recuerda si encuentras algún error, ya que de esta manera podemos perfeccionarlo, Gracias.
=> Index.html
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//ES' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<head>
<title>CAPTCHA V1.0 - EcuaSoft</title>
<meta name="author" content="Alan Guevara - Ecuador" />
<meta name="revised" content="19/06/12"/>
<meta name="description" content="Prohibe el ingreso a los Bots, con un simple sistema de Captcha validado." />
</head>
<body>
<b>Ejemplo de Uso de este sistema en su v1.0 .</b>
<p> Requirimientos: PHP 5, Librería GD y Soporte de Session</p>
<?php
/** COMPROBAR LIBRERIA GD, Y VERSION DE PHP **/
if(!function_exists('gd_info')){
die('Lo sentimos, no posees una version de la libreria Grafica GD propia de PHP 5');
}elseif( version_compare(PHP_VERSION, '4.3', '<') )
{
die('La version de PHP, no es la adecuada para continuar con el script. ');
}elseif( !function_exists('session_start')){
die('Tu version de PHP, no posee soporte sessions ');
}
?>
<div style="width: 400px; border: 1px solid #000; margin-top: 60px; text-align: center;">
<br/>
Ejemplo de Uso de Captcha en Formularios:
<br/><br/>
<form action="validar.php" method="POST">
<img src="captcha.php" alt="captcha" />
<br/><input type="text" name="response" value="" />
<br/><input type="submit" value="Verificar Respuesta" />
</form>
<br/>
(Refresca la página, para que el captcha cambie.)
<br/><br/>
</div>
</body>
</html>
=> validar.php
<?php
//#######################################################################
//# Author: Alan Guevara Chávez #
//# Filename: validar.php #
//# Copyright: EcuaSoft 2012-2013 - PHP Roles Developers #
//# Description: Sistema de Captcha Version 1.0 #
//# #
//# License: Este software es de uso libre, sin fines de lucro #
//# o comercial. Ayudanos a ayudar. #
//#######################################################################
//Iniciar Gestor de Session
@session_start();
if(ISSET($_SESSION['captcha'])){
//Key Generada y Guardada en una variable de Session
$challenge = strtolower($_SESSION['captcha']);
if(ISSET($_POST['response'])){
//Codigo ingresado por el usuario.
$response = strtolower(trim($_POST['response']));
//Si la respuesta ORIGINAL, es igual a la ingresada por el Cliente.
if($challenge==$response){
echo " Verificación Correcta. :) ";
}else{
echo " El código ingresado no coincide con la imagen. ";
}
} else {
die("Lo siento, debes ingresar el codigo de la imagen en la respectiva casilla.");
}
} else {
die("Lo siento, la variable de session no existe. ");
}
?>
=> captcha.php
<?php
//#######################################################################
//# Author: Alan Guevara Chávez #
//# Filename: captcha.php #
//# Copyright: EcuaSoft 2012-2013 - PHP Roles Developers #
//# Description: Sistema de Captcha Version 1.0 #
//# #
//# License: Este software es de uso libre, sin fines de lucro #
//# o comercial. Ayudanos a ayudar. #
//#######################################################################
/*
OPCIONES DE CONFIGURACION
*/
$captchaCodeLength=8;
//Dimensiones de Imagen
$width = 125;
$height = 30;
// Colores de Fondo y Texto
$bgR = mt_rand(128, 255);
$bgG = mt_rand(128, 255);
$bgB = mt_rand(128, 255);
$txtR=$bgR - 128;
$txtG=$bgG - 128;
$txtB=$bgB - 128;
$gridXincrement=24;
$gridYincrement=19;
$angleX=5;
$angleY=5;
/*
NO MODIFICAR ESTA LINEA .
*/
@session_start();
/* CARACTERES ALEATORIOS TOMADOS DESDE EL BANCO DE LA VARIABLE!
*/
$banco = 'ABCDEFGHJKMNPQRSTUV12345689';
$newKey = '';
for($x = 0; $x < $captchaCodeLength; $x++){
//Aleatorio - Posicion de caracter
$aleatorio = mt_rand(0, strlen($banco)-1);
//Concatenar Caracter por caracter
$newKey .= substr($banco, $aleatorio, 1);
}
//Guardar Key Generada en variable de sesion
$_SESSION['captcha'] = str_replace(" ", "", $newKey);
// Crear una nueva imagen, con dimensiones anteriormente dada.
$image = imagecreate($width, $height);
// Generar colores alojados.
$bgColor = imagecolorallocate($image, $bgR, $bgG, $bgB);
$txtColor = imagecolorallocate($image, $txtR, $txtG, $txtB);
// Aplicar el fondo a la imagen.
imagefill($image, 0, 0, $bgColor);
/* Distorsionar la Imagen (GRID) - Lineas interseccionadas(x,y).
*/
for($gridX = 0; $gridX <= $width; $gridX+=$gridXincrement){
$gridXRAND=mt_rand($gridX, $gridX+3);
imageline($image, $gridXRAND, 0, $gridXRAND + mt_rand(0, $angleX), $height, $txtColor);
}
for($gridY = 0; $gridY <= $height; $gridY+=$gridYincrement){
$gridYRAND = mt_rand($gridY, $gridY + 6);
imageline($image, 0, $gridYRAND, $width, $gridYRAND + mt_rand(0, $angleY), $txtColor);
}
// Escribir la key generada en la imagen, en sentido HORIZONTAL
$x=mt_rand(8, 15);
$y=mt_rand(4, 10);
imagestring ( $image , 5 , $x , $y, $newKey, $txtColor );
// Colocar un borde rectangular al resourceImagen
imagerectangle($image, 0, 0, $width - 1, $height - 1, $txtColor);
// Enviar Cabeceras, y prevenir que se guarde en cache los datos.
header('Expires: Mon, 16 Sept 1994 00:00:00 GMT');
header('Cache-Control: no-cache, must-revalidate');
header("Content-Type: image/gif");
imagegif($image);
imagedestroy($image);
?>
Gracias por pasar por este tema, pues de eso se trata APRENDER A APRENDER.
Saludos!