Como criar uma imagem captcha simples com PHP

BotDetectSe você tem campos com formulários públicos em seu site (contatos, comentários, guestbooks, etc.) provavelmente já recebeu massagens automáticas deixadas por spammers. Dependendo da frequência e quantidade, essas massagens podem chegar até a comprometer o desempenho de seu servidor, além de encher seu BD de lixo eletrônico.

Uma maneira eficiente de barrar esse problema  é a implementação do CAPTCHA – uma imagem com uma string gerada aleatoriamente que verifica se quem esta tentando deixar a mensagem é realmente uma pessoa.

Um CAPTCHA é um tipo de desafio-resposta, teste utilizado na computação para determinar se o usuário é humano, CAPTCHA  é um acrônimo para “Completely Automated Public Turing test to tell Computers and Humans Apart” (teste de Turing público completamente automatizado para diferenciação entre computadores e humanos), registrado pela Carnegie Mellon University.

Neste artigo vamos apresentar um script PHP bastante simples, com ele vamos criar uma imagem CAPTCHA totalmente funcional a partir de funções nativas do PHP e da GD (PHP graphics library), vamos criar um arquivo a parte, chamado “captcha.php” que será responsável pela geração da imagem-teste.
Também vai ser necessário uma pequena imagem base que será usada pela função “imagecreatefromjpeg()” como base de nosso  CAPTCHA, você pode cria-lá com o MSPaint.

Vejam o Código do “captcha.php”:

   1: <?php

   2: session_start();

   3: header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 

   4: header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 

   5: header("Cache-Control: no-store, no-cache, must-revalidate"); 

   6: header("Cache-Control: post-check=0, pre-check=0", false);

   7: header("Pragma: no-cache");

   8:  

   9: function gerachar($length=6)

  10: {

  11:     $_rand_src = array(

  12:         array(48,57) //números

  13:         , array(97,122) //letras maiúsculas

  14:         , array(65,90) //letras minúsculas

  15:     );

  16:     srand();

  17:     $random_string = "";

  18:     for($i=0;$i<$length;$i++){

  19:         $i1=rand(0,sizeof($_rand_src)-1);

  20:         $random_string .= chr(rand($_rand_src[$i1][0],$_rand_src[$i1][1]));

  21:     }

  22:     return $random_string;

  23: }

  24:  

  25: $img = @imagecreatefromjpeg("fundo.jpg"); 

  26: $rand = gerachar(4);

  27: $_SESSION['captcha'] = $rand;

  28: ImageString($img, 5, 5, 7, $rand[0]." ".$rand[1]." ".$rand[2]." ".$rand[3], ImageColorAllocate ($img, rand(0,255), rand(0,255), rand(0,255)));

  29: Header ('Content-type: image/jpeg');

  30: imagejpeg($img,NULL,100);

  31: ImageDestroy($img);

  32: ?>

Agora é só chamar a imagem CAPTCHA a partir de um formulário HTML:

   1: <?php session_start() ?>

   2: <form method="post" action="">

   3: <table bgcolor="#CCCCCC">

   4: <tr><th>Deixe seu recado:</th></tr>

   5: <tr><td><textarea cols="30" rows="5" name="message"></textarea></td></tr>

   6: <tr><td align="center">CAPTCHA:<br>

   7:     (Digite o código da imagem)<br>

   8:     <table><tr><td><img src="captcha.php" alt="Você é humano?"></td>

   9:     <td><input type="text" name="captcha" size="4" maxlength="4"></td></tr></table>

  10: </td></tr>

  11: <tr><th align="center"><input type="submit" value="Submit"></th></tr>    

  12: </table>

  13: </form>

  14: <?php

  15: if(isset($_POST["captcha"]))

  16: if($_SESSION["captcha"]==$_POST["captcha"])

  17: {

  18: 

  19:     echo 'Código correto, seu recado foi enviado!';

  20: }

  21: else

  22: {

  23:     echo 'Código incorreto; tente novamente...';

  24: }

  25: ?>

O “pulo do gato” de nosso código é que o mesma variável aleatória  responsável pelo criação do código  de verificação é passada pela seção PHP para ser testada.

Download do script exemplo

Compartilhe Também:

Comentários(4)

Deixe seu comentário