Esta é uma ferramenta que com o tempo, ficou muito importante nos sites, blogs, etc, para ter certeza que não são “máquinas” fazendo logins, cadastros, etc e principalmente, não são “máquinas” roubando dados, com bots, de seus domínios (chamaremos assim os sites, blogs, post sites, sistemas, etc).
Existe uma forma muito simples de criar, em seu domínio, seu próprio CAPTCHA em PHP.
Obvio que para isso, devemos ter o PHP rodando com a biblioteca GD habilitada.
Primeiramente, precisamos de uma imagem de fundo, aquelas bem confusas pra gerarmos as letras em cima.
Vamos usar esta:
Uma boa dica é dar uma voada no google e ver os fundos que tem por lá.
Outra forma, caso você tenha os dotes artísticos, cria a sua ou as suas nos editores gráficos do momento.
Usaremos uma com estrutura JPEG (JPG). Pode-se usar GIF, TIFF, PNG, BMP, mas a JPEG dá uma boa resolução e a ferramenta gráfica que utilizaremos, roda sem problema.
Para o próximo passo, dentro de seu preferido editor de PHP, vamos criar um arquivo novo, chamado captcha.php e iniciar seu conteúdo:
< ?php
$size_font=20;
$text=geraTexto(6);
session_start();
$_SESSION['CaptchaTEXT']=$text;
Nestas primeiras linhas, estou acertando umas variáveis que usarei lá na frente…
A função geraTexto(), já esta postada, você pode pegá-la aqui.
O detalhe de colocar o conteúdo do captcha em session é o que de melhor tem para proteger seu código.
Vamos ao objetivo agora:
header("Content-type: image/jpeg");
Estou dizendo que o resultado desta “página”, será uma imagem JPEG. Com isso o browser vai entender que é uma imagem mostrá-la de acordo com as regras impostas às imagens.
$im=imagecreatefromjpeg('bg_6.jpg');
A função imagecreatefromjpeg, que sua tradução fica literal com o uso, cria imagem a partir de um JPEG. Neste caso, você passa como parâmetro o arquivo de fundo.
$cor=null;
$cor[1]=array(1,1,1);
$cor[]=array(128,128,128);
$cor[]=array(255,255,255);
$cor[]=array(255, 0, 0);
$cor[]=array( 0,255, 0);
$cor[]=array( 0, 0,255);
$cor[]=array( 0,255,255);
$cor[]=array(255,255, 0);
$cor[]=array(255, 0,255);
$cor_escolhida=rand(1,count($cor));
Para ter uma “paleta de cores” e montar o texto mudando de cor, com esse código preparo as cores e escolho através de rand
.
$letra=imagecolorallocate($im,$cor[$cor_escolhida][0],$cor[$cor_escolhida][1],$cor[$cor_escolhida][2]);
Agora eu coloco a cor no texto… Uso as array´s positions para isso.
$px = rand(10,200-(strlen($text)*20));
$py = rand(28,42);
Informo a posição que o texto será escrito sobre a imagem. Uso rand
também para colocar em lugares diferentes. Usei uma fórmula derivada do tamanho da imagem (200×50).
imagettftext($im, $size_font, rand(-8,8), $px, $py,$letra,'ARIAL.TTF', $text);
Finalmente, escrevo o texto. rand(-8,8)
Coloca o texto inclinado de -8 graus a 8 graus.
Aqui tem mais uma coisa importante. O arquivo ‘ARIAL.TTF’ deve estar junto do código. Não vou entrar em detalhes de organização. Isso é um exemplo, depois cada um adapta a sua realidade, estrutura e tudo mais.
imagejpeg($im);
Ah… Gera a imagem na tela…
imagedestroy($im);
E destroi… Abrimos em cima e fechamos aqui.
Vamos agora colocá-lo na sua página de verificação. Inseriremos em um campo IMG.
<div id="pesquisa"> <form name="captcha" method="post" action=""> <table> <tr> <td><img src="captcha.php" alt="CAPTCHA" /></td> <td><input size=10 type=text name=captcha value=""/></td> </tr> <tr align="center"> <td colspan=2><input type=submit name=botao value="..:: Enviar ::.."/></td> </tr> </table> </form></div>
Feito…
Considerações Finais…
Pode-se usar
rand
para trocar as imagens de fundo:
Pegue uma coleção de imagens, coloque-as em um diretório e dê à elas nomes seqüenciais, exemplo: bg_1.jpg, bg_2.jpg, bg_3.jpg, etc…
Depois, faça um código que leia o dir, conte os arquivos lá e carregue em$totalArquivos
.
Faça um$fundo='./backgrounds/bg_'.rand(1,$totalArquivos).'.jpg');
, pronto… Fundos automáticos… Não esqueça de substituir no código, trocando o fundo fixo pela variável$fundo
.
Da mesma forma, pode-se usar
rand
para trocar as fontes da escrita dos códigos:
Pegue uma coleção de arquivos de fontes, coloque-as em um diretório e dê à elas nomes seqüenciais, exemplo: font_1.jpg, font_2.jpg, font_3.jpg, etc…
Depois, faça um código que leia o dir, conte os arquivos lá e carregue em$totalFontes
.
Faça um$fonte='./fontes/font_'.rand(1,$totalFontes).'.TTF');
, pronto… Fontes automáticas… Não esqueça de substituir no código, trocando a fonte fixa pela variável$fonte
.
Acho que é isso… Aproveitem…