Aldeia Numaboa - Criando um CAPTCHA em PHP
Você está aqui: Home Informática Tutoriais e Programação PHP Criando um CAPTCHA em PHP
81.3% Brasil
9.2% Estados Unidos
3% Portugal
2.2% México
0.8% França
Ontem: 410
Esta Semana: 1775
Semana Passada: 3418
Este Mês: 9663
Mês Passado: 11627
Total: 519649
Informática Numaboa
Criando um CAPTCHA em PHP
(56 votos, média 3.91 de 5)
Atualização: Sexta, 04 Maio 2012 17:06
Acessos: 32745
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
Isto 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:
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); ?>
Artigo de human publicado no code.box.
Вадим Логофет отецчугунная сковорода вок купитьресторан никас обыск лобановскийкисточка для растушевкидень музыкиростов никас