Criando um captcha com o PHP

Boa noite computêros, vocês sabem o que é um captcha? Talvez não o conheça por esse nome, mas com certeza já deve ter utilizado algum formulário que continha um captcha…
Veja a definição de Captcha na Wikipedia:
CAPTCHA é um acrônimo da expressão “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): um teste de desafio cognitivo, utilizado como ferramenta anti-spam, desenvolvido pioneiramente na universidade de Carnegie-Mellon. Como o teste é administrado por um computador, em contraste ao teste de Turing padrão que é administrado por um ser humano, este teste é na realidade corretamente descrito como um teste de Turing reverso.
Resumindo, um Captcha é um modo de diferenciar se quem está navegando na página é um robô ou um ser humano através de um teste.
Lembra aquelas palavras que você tem que digitar para fazer download como no rapidshare, ou megaupload? Isso é um captcha, nestes casos eles são utilizados para que programadores não desenvolvam softwares capazes de fazerem download dos arquivos em massa, entretanto, muito algoritmos já foram desenvolvidos para quebrar alguns captchas, mas isso já é outra história…
Seguindo o tutorial no Numa Boa eu consegui fazer um sisteminha bem legal de Captcha:
- Imagem de fundo:

Antes de mais nada você deverá criar uma imagem de fundo para o seu Captcha, o tamanho e o estilo você mesmo definirá de acordo com suas necessidades, caso não tenha habilidades com o o design, faça como eu, peça para seu irmão mais novo fera no Photoshop. (ou salve a imagem que dei de exemplo).
Vale lembrar que quanto mais “esquisita” a imagem de fundo, mais segura ela será, porém cuidado, o captcha é para dificultar o trabalho dos robôs, não dos humanos!
Para definirmos a imagem de fundo utilizaremos o seguinte comando:
//cria uma imagem a partir de um fundo
$img = imagecreatefromjpeg("captcha.jpg");
O texto do CAPTCHA:
Para adicionarmos um texto na imagem utikizaremos a função imageloadfont( ), onde devemos informar o nome da fonte, entretanto as fontes TTF (True Type) costumam dar problemas, portanto utilizaremos um conversor de TTF para GD.
Para carregarmos a nossa fonte GD utilizaremos a função:
$font = imageloadfont("cooper_black_48.gdf");
Gerando um texto aleatório:
Não vou falar muito de como gerar um texto aleatório no PHP, pois temos um post completo aqui no blog sobre isso, e nesse exemplo utilizaremos a mesma função do post.
Para “escrevermos” o texto na imagem utilizaremos a função:
imagestring($img,$font,0,0,$_SESSION["captcha"],$corTexto);
- Exibindo a imagem:
A parte mais fácil de tudo será exibir a imagem, não há nenhum segredo, somente colocar no src da tag img o endereço da página em php que criará a imagem no nosso caso a “captcha.php”.
<img src=”captcha.php” />
Difícil pra caramba né?
Agora vamos a todos os códigos:
//função já postada no blog para gerar códigos
function gerarCodigo($max){
$vetor = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9");
$cod = "";
for($i=0;$i<$max;$i++){
$cod = $cod . $vetor[rand(0,count($vetor))];
}
return $cod;
}
//inicia a sessão
session_start();
//gera um código de 5 caracteres e armazena na session utilizada para controle
$_SESSION["captcha"] = gerarCodigo(5);
//indica para o html que a página trata-se de uma imagem jpeg
header("Content-type: image/jpg");
//cria uma imagem a partir de um fundo
$img = imagecreatefromjpeg("captcha.jpg");
//Define a fonte utilizada na imagem
$font = imageloadfont("cooper_black_48.gdf");
//Define a cor do texto
$corTexto = imagecolorallocate($img,150,150,150);
//Escreve o texto na imagem
imagestring($img,$font,0,0,$_SESSION["captcha"],$corTexto);
//Cria a imagem
imagejpeg($img);
//Limpa a memória
imagedestroy($img);
?>
session_start();
echo "
Você escreveu: " . $_POST["txtCode"] . "
";
echo "O código era: " . $_SESSION["captcha"] . "
";
if ($_POST["txtCode"] == $_SESSION["captcha"]){
echo "você acertou";
}
else{
echo "você errou";
}
?>
É isso aí computêros… qualquer dúvida utilizem os comentários.
Obs: Já ia me esquecendo, você pode ver o código funcionando aqui:
Para quem tentou e nao conseguio , e pq nao tem a fonte que o codigo pede. Baixe ela usada no tutorial entrando neste link: http://blog.computero.com.br/exemplos/captcha/cooper_black_48.gdf