Marcofbb Noticias y Artículos Webmasters



Publicidad marcored

Crear CAPTCHA con PHP

  • 10/02/2011
  • 4:30 pm
  • marcofbb

¿Que es una CAPTCHA?
Se trata de una prueba desafío-respuesta utilizada en computación para determinar cuándo el usuario es o no humano. Esto sirve para evitar spam en tu sistema, ya sea un sistema de comentarios, un foro, un blog.

Crear captcha con php

Vamos a generar una imagen que va a contener 8 letras en la cual se va a guardar en una SESSION, después vamos a comprobar si lo que introducimos en el campo de texto es igual a la session, si es igual la captcha se escribió correctamente, si no es igual pide que vuelvas a intentar y te genera otra captcha.

La imagen
Primero vamos a crear una imagen con un texto aleatorio, esto lo va a hacer el archivo captcha.php que crea un texto alfanumérico aleatorio dentro de una imagen .gif

< ?php
session_start();
function randomText($length) {
    $pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
    for($i=0;$i<$length;$i++) {
      $key .= $pattern{rand(0,35)};
    }
    return $key;
}
 
$_SESSION['tmptxt'] = randomText(8);
$captcha = imagecreatefromgif("bgcaptcha.gif");
$colText = imagecolorallocate($captcha, 0, 0, 0);
imagestring($captcha, 5, 16, 7, $_SESSION['tmptxt'], $colText);
 
header("Content-type: image/gif");
imagegif($captcha);
?>

Formulario que valida la captcha
Vamos a mostrar la imagen generada en captcha.php en un formulario que pide introducir lo que dice dentro de la captcha en un input.

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<img src="captcha.php" width="100" height="30" vspace="3"/><br />
<input name="tmptxt" type="text" size="30"/><br />
<input name="btget" type="submit" class="boton" value="Verificar Codigo"/>
<input name="action" type="hidden" value="checkdata"/>
</form>

Verificando la captcha
Una vez que apretamos el botón Verificar Código, se va a comparar lo introducido en el campo con la session que tiene guardada el texto que se utilizo en la captcha.

Antes de esto va a ver si existe la session ya que los bots aveces borrar la session una vez entrada a la web entonces si borran la session y dejan el campo vació daría como si aviamos puesto bien la captcha porque nada es igual a nada y por eso nos da true.

session_start();
if ($_POST['action'] == "checkdata") {
	if(isset($_SESSION['tmptxt'])){  // Comprobamos que este la session tmptxt
		if ($_SESSION['tmptxt'] == $_POST['tmptxt']) { // Si la cadena de texto introducida es igual a la imagen
			echo "Bienvenido";
		} else {
			echo "Intentalo nuevamente";
		}
	} else { 
		echo "Error"; 
	}
	exit;
}

Via | Unijimpe

Descargar captcha hecha en php

Share

¿Necesitas ayuda? o ¿Asesoramiento webmaster? Registrate en nuestro foro de consultas

Posts Relacionados

Total de Comentarios: 12

Avatar
10/02/2011
6:28 pm

[...] This post was mentioned on Twitter by Francisco Manuel, Marco Fernando. Marco Fernando said: Crear CAPTCHA con PHP http://goo.gl/fb/5jhl3 [...]

Avatar
14/02/2011
7:55 pm

Lo descargué, pero no anda.

    Avatar
    14/02/2011
    8:06 pm

    Tu hosting tiene la librería GD activa ?

    Que error te tira ?

Avatar
15/02/2011
6:19 pm

Si, tiene libreria gd, porque hace poco cree un script de imágenes dinámicas.
Y no es que tira error, sino que la imagen bgcapta.gif no se ve. Y dice "captcha.php no se puede mostrar porque contiene errores"

Avatar
15/02/2011
7:16 pm

ahh ya se el error :p

Intenta esto:
Cambia en

<img src="captcha.php" width="100" height="30" vspace="3">

src="captcha.php" por src="http://www.tuweb.com/captcha.php"

Avatar
15/02/2011
10:11 pm

Si. Ya lo había agregado. Igual me quedé con mi sistema.

Pd: Si podés agregame a mi Mail.

Avatar
15/02/2011
10:42 pm

Como no, ahi te agrego, si quieres podes compartir tu sistema para tener varias alternativas.

Avatar
cHRISTIAN
23/06/2011
1:56 pm

Hola marco gracias por el cpatcha, pero me tira error en la imagen del captcha me sale x y no visualiza el captcha...
q estoy haciendo mal
ya tengo la libreria gd y es compatible,...
me falta configurar algo???
ayuda

Avatar
daniel
11/07/2013
4:54 pm

pero el inconveniente es que cuando regresas te borra los campos ya llenados ...

Avatar
Johnd610
29/06/2014
6:02 am

You are my inspiration , I have few web logs and very sporadically run out from to brand. dfebfdeabekc

Avatar
GABRIEL RINCON
04/12/2014
4:48 pm

El error está en que no inicializan la variable $key

Deberia quedar así

function randomText($length) {
$pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
$key=null;//Línea agregada
for($i=0;$i<$length;$i++) {
$key .= $pattern{rand(0,35)};
}
return $key;
}


Enviar Comentario

(*)

(*)