Captcha con PHP y JpGraph

JpGraph una de las librerías mas completas para generar imágenes de la cual hemos hablado en JpGraph: Gráficos con PHP tiene entre una de sus características la de generar imágenes para hacer captcha. En esta ocasión veremos la forma de implementar un formulario que incluya verificación por captcha para protegerlo del ataque de los spammers.

catpcha-jpgraph.gif

Captcha con JpGraph
JpGraph posee una librería llamada jpgraph_antispam.php la cual permite generar las imagenes con textos aleatorios distorsionados. Entonces lo primero es incluir el archivo jpgraph_antispam.php y luego creamos la imagen con la función Rand que recibe como parámetro la cantidad de caracteres a generar.

  1. include("inc/jpgraph_antispam.php");
  2. $spam = new AntiSpam();
  3. $code = $spam->Rand(6);
  4. $spam->Stroke();

En el ejemplo hemos generado una imagen con un texto aleatorio de 6 caracteres. Notese que el texto generado es devuelto por esta función y la hemos almacenado en la variable $code. Esta variable la podríamos almacenar en una variable de sesión para verificarla posteriormente.

Creando el Captcha
Entonces creamos un archivo php llamado captcha.php en el cual generaremos un texto aleatorio y lo almacenaremos en una variable de sesión y luego generamos la imagen captcha.

  1. // file: captcha.php
  2. include("inc/jpgraph_antispam.php");
  3. $spam = new AntiSpam();
  4. $_SESSION['tmptxt']= $spam->Rand(6);
  5. $spam->Stroke();

Con lo cual obtenemos el siguiente resultado:

Creando el formulario
el siguiente paso es la creación del formulario que deseamos proteger, para nuestro ejemplo solo incluiremos un campo de texto solicitando nombres y luego incluimos la imagen.

  1. <h3>Formulario</h3>
  2. <form name="register" method="post">
  3. Nombres<br />
  4. <input name="nombres" type="text" id="nombres" /><br />
  5. Verificacion:<br />
  6. <img src="captcha.php" width="100" height="30"><br />
  7. <input name="tmptxt" type="text" id="tmptxt" /><br />
  8. <input type="submit" name="Submit" value="Enviar" />
  9. <input name="action" type="hidden" value="checkdata">
  10. </form>

Verificando los datos
Finalmente en la pagina que recibe los datos del formulario primero verificamos que el texto ingresado corresponda al generado en el captcha antes de procesar los datos.

  1. if ($_POST['action'] == "checkdata") {
  2.     if ($_SESSION['tmptxt'] == $_POST['tmptxt']) {
  3.         echo "Bienvenido ".$_POST['nombres'];
  4.     } else {
  5.         echo "Error: Inténtalo nuevamente";
  6.     }
  7.     exit;
  8. }

Sencillo y con código muy entendible para poder modificarlo y adaptarlo a nuestras necesidades. Pueden ver el resultado del ejemplo funcionando en: http://samples.unijimpe.net/jpgraph/demo-captcha.php .

Posts Relacionados

Comentarios Total 8 comentarios


Daniel
Publicado: 30/10/2007 7:18 pm

Gracias me viene de perlas :)

Marc
Publicado: 01/11/2007 12:30 am

Muy bueno :D
Me hacia mucha falta

juan
Publicado: 06/12/2007 3:38 am

Hola unijimpe, como puedo modificar la imagen creeada con esta libreria, que fuera mas parecida a la de tu ejemplo de “crear captcha con php” pues la que genera el jpgraph_antispam.php aveces es poco entendible

Raul
Publicado: 17/05/2008 9:50 am

Hola, me viene muy bien, tengo un pequeño problemita, la imagen no es igual a la variable de sesión, en la variable de sesión guarda el captcha anterior, alguna forma de solucionar esto?.

juanito
Publicado: 23/08/2008 9:33 pm

solo un pequeño detalle, en la carpeta “inc”, hay un monton de archivos (4MB en total), pero solo necesitamos 2:
jpgraph_antispam-digits.php y
jpgraph_antispam.php

Artenara
Publicado: 17/12/2008 11:28 am

Bueno a todos los comentarios que he leido sobre que no les funciona la imagen, les recomiendo que instalen las librerias GD,

por ejemplo en debian con php5

apt-get install php5-gd

debian php4

apt-get install php4-gd

saludos a todos gracias por estas colaboraciones.

Edgar
Publicado: 02/04/2009 3:56 pm

Hola a todos, espero me puedan ayudar cuando realice el ejemplo con jpgraph cuando abro captcha.php no veo la imagen solo sale la siguiente linea:

Rand(6); $_SESSION['tmptxt'] = $chars; $spam->Stroke(); ?>

me pueden decir que esta mal??


[...]  http://blog.unijimpe.net/captcha-con-php-y-jpgraph/ , encuentro un excelente artículo, en donde explica como implementar un sistema Captcha propio, [...]

 

Comentar

En este blog los comentarios están moderados, no aparecerán inmediatamente en la página al ser enviados. Por favor, evita los comentarios ofensivos u obscenos por que no serán aprobados.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)