Aldeia Numaboa
Um portal diferente em Português do Brasil
Informática da Aldeia

Tutoriais
Home Informática Tutoriais PHP Criando um CAPTCHA em PHP

Na Aldeia

Há 111 visitantes online

2796 registros
0 hoje
6 nesta semana
4 neste mês

Boas vindas: delilah

Estatística

Artigos: 848
Artigos lidos: 3919096
Arquivados: 41
Downloads: 416
Baixados: 161778
Glossário: 1198
Bibliografia: 24
JoomlaWatch Stats 1.2.7 by Matej Koval

Visitas de onde?

88,3%Brasil Brasil
9,2%Portugal Portugal
0,8%EUA EUA
0,2%Espanha Espanha
0,1%Alemanha Alemanha

Visitantes

Hoje: 484
Ontem: 1940
Esta semana: 2424
Semana passada: 12942
Este mês: 2424
Mês passado: 52379
Total: 123709

Registro/Login

Para fazer login ou registrar-se

Usuários registrados têm algumas regalias!

Qua

17

Set

2008


21:51

Criando um CAPTCHA em PHP PDF Imprimir Indique esta página
Avaliação: / 9
PiorMelhor 
Tutoriais - PHP
Escrito por vovó Vicki   


Nível avançado CAPTCHA vem de Completely Automated Public Turing test to tell Computers and Humans Apart, ou seja, um teste para diferenciar humanos de computadores. Se você não sabe o que é um CAPTCHA, leia O que é CAPTCHA. Se você sabe o que vem a ser um CAPTCHA e quer aprender a criá-los em PHP, então este é o tutorial

1. A imagem de fundo

CaptchaIsto não tem nada a ver com a linguagem PHP, mas é uma etapa obrigatória. Afinal de contas, todo CAPTCHA que se preze tem uma imagem de fundo. Não é para ser uma imagem toda bonitinha porque, quanto mais "bagunçado" o fundo, melhor e mais seguro será o CAPTCHA. Você pode criar uma imagem em qualquer editor gráfico ou copiar esta daqui da mesma forma que a copiei do Code.box.sk...

Seja qual for a imagem que você escolher, salve-a no formato png e dê-lhe o nome de captcha.png. Esta imagem de fundo vai ser carregada usando a função do PHP imagecreatefrompng( ):

$imagemCaptcha = imagecreatefrompng("captcha.png");

Você pode usar outros formatos de imagem, como gif ou jpg. Se for este o caso, a função chamadora precisa corresponder ao tipo de imagem (imagecreatefromgif, imagecreatefromjpeg, etc).

2. O texto do CAPTCHA

Para carregar um texto na imagem de fundo será preciso acionar a função PHP imageloadfont( ). O parâmetro desta função é o nome da fonte. As fontes TTF (true type) costumam dar problemas, então nem pensar. O PHP parece gostar apenas de fontes GD. Será que você vai parar por aqui porque não tem fontes do tipo GD? Nem pensar!

Procure algumas fontes GD na net ou na seção de downloads aqui da Aldeia, ou ainda escolha uma fonte TTF qualquer que esteja na sua máquina e use o WFtoPF para transformá-la em GD. Tá feito o jogo!

3. String randômica

Depois de criar a imagem de fundo e carregar a fonte, chegou a hora de gerar uma string única como texto do CAPTCHA. Para isto podemos usar a função MD5 do PHP:

$textoCaptcha = substr(md5(uniqid('')),-9,9);

A função uniqid( ) gera uma string única. Esta é transformada num hash MD5 (se você não sabe o que é isto, dê uma procurada na seção de Criptografia da Aldeia para se informar). Depois disto, retiramos os últimos 9 caracteres do hash com a função substr( ) do PHP. Este exemplo usa 9 caracteres, mas você pode optar por quantos quiser.

Esta string precisa ser armazenada de alguma forma para que possa ser comparada posteriormente com a que o usuário fornecer. Você pode armazená-la numa variável session, num cookie ou na sua base de dados. A escolha é sua.

Para colocar a string na imagem de fundo usamos a função imagestring( ).

4. Mostrando a imagem

A função para mostrar a imagem no formato PNG é imagepng( ). A forma de colocar a imagem na página é muito simples - basta chamar uma imagem dando como fonte o script php:

<img src="captcha.php" width="233" height="49">

Coloque o script, a imagem de fundo e a fonte num mesmo diretório e faça a chamada. O resultado é o seguinte:

O script captcha.php

<?php
/***
* File : captcha.php
* Description : Cria uma imagem captcha e guarda o texto numa variável session
* Autor : Kiran Paul V.J. aka kiranvj aka human
* Licença : Freeware
* Última atualização : 22-Aug-2007
*/
 
// Inicializa os dados da session
session_start();
 
// Definir o header como image/png para indicar que esta página contém dados
// do tipo image->PNG
header("Content-type: image/png");
 
// Criar um novo recurso de imagem a partir de um arquivo
$imagemCaptcha = imagecreatefrompng("captcha.png")
or die("Não foi possível inicializar uma nova imagem");
 
//Carregar uma nova fonte
$fonteCaptcha = imageloadfont("anonymous.gdf");
 
// Criar o texto para o captcha
$textoCaptcha = substr(md5(uniqid('')),-9,9);
 
// Guardar o texto numa variável session
$_SESSION['session_textoCaptcha'] = $textoCaptcha;
 
// Indicar a cor para o texto
$corCaptcha = imagecolorallocate($imagemCaptcha,0,0,0);
 
// Escrever a string na cor escolhida
imagestring($imagemCaptcha,$fonteCaptcha,15,5,$textoCaptcha,$corCaptcha);
 
// Mostrar a imagem captha no formato PNG.
// Outros formatos podem ser usados com imagejpeg, imagegif, imagewbmp, etc.
imagepng($imagemCaptcha);
 
// Liberar memória
imagedestroy($imagemCaptcha);
 
?>

Fonte

Artigo de human publicado no code.box.

Última atualização ( Qui, 18.09.2008 13:05 )
 

Topo

Topo