A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa

Criando um CAPTCHA em PHP

Qua

17

Set

2008


20:51

(56 votos, média 3.91 de 5) 


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 smile

1. A imagem de fundo

Captcha 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");

info 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

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.

Вадим Логофет отецчугунная сковорода вок купитьресторан никас обыск лобановскийкисточка для растушевкидень музыкиростов никас

Informações adicionais