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

Tutoriais
Home Informática Tutoriais e Programação PHP Um captcha simples pra caramba

Na Aldeia

Há 133 visitantes online

3630 registros
0 hoje
14 nesta semana
4 neste mês

Boas vindas: flor

Estatística

Membros: 3639
Artigos: 1045
Links: 90
Leituras: 6681440

Login



Kanji da hora




Faça contato






Qui

18

Set

2008


20:56

Um captcha simples pra caramba PDF Imprimir Indique esta página
(11 votos, média 3.5 de 5)
Escrito por vovó Vicki   


Nível Intermediário

Este é um pequeno tutorial de como criar um CAPTCHA em PHP que, como já diz o título, é simples pra caramba.

Este CAPTCHA pode ser integrado em qualquer página ou formulário, como também pode ser inserido em componentes e módulos Joomla. Para criar este CAPTCHA usaremos a linguagem PHP. Veja o código:

<?php
/* Captcha
 *
 * Gera imagem do código
 *
 * 2007 Aldeia Numaboa
 * @author: Viktoria Tkotz, contato arroba numaboa.com.br
 *
 */
 
// Gerar números do código
$seccode = mt_rand(10000, 99999);
 
// Se quiser, o texto também pode conter letras
/* $chars = "AB1CD2EF3GH4IJ5KL6MN7P8QR9STUVWXYZ";
$seccode = "";
for($i = 0; $i < 5; $i++)  // $i < Número de caracteres
  $seccode .= $chars[mt_rand(0, 33)];
*/
 
// Criar imagem
header("Content-Type: image/png");
$im = imagecreate(60, 18) or die('Erro ao criar imagem!');
// imagecreate(LARG, ALTURA)
$corfundo = imagecolorallocate($im, 255, 244, 234);
// imagecolorallocate($im, R, G, B) Só mudar R,G,B!
$corfonte = imagecolorallocate($im, 255, 128, 0);
// imagecolorallocate($im, R, G, B) R,G,B!
$corlinha = imagecolorallocate($im, 255, 200, 150);
// imagecolorallocate($im, R, G, B) R,G,B!
$corborda = imagecolorallocate($im, 255, 128, 0);
// imagecolorallocate($im, R, G, B) R,G,B!
 
// Linhas verticais
for($x=10; $x <= 100; $x+=10)
    imageline($im, $x, 0, $x, 50, $corlinha);
 
// Linha central
imageline($im, 0, 9, 100, 9, $corlinha);
 
// Borda
imageline($im, 0, 0, 0, 50, $corborda);
imageline($im, 0, 0, 100, 0, $corborda);
imageline($im, 0, 17, 100, 17, $corborda);
imageline($im, 59, 0, 59, 17, $corborda);
 
imagestring($im, 5, 8, 1, $seccode, $corfonte);
imagepng($im);
imagedestroy($im);
?>

O resultado é o seguinte:

  • Captcha apenas com dígitos:
  • Captcha com letras e números:

O código

Na linha 11 foi usada a função mt_rand() para obter um número randômico na faixa de 10000 a 99999. Os cinco dígitos deste número, armazenado na variável $seccode, serão utilizados como texto do captcha.

As linhas de 13 a 18 estão bloqueadas e servem apenas para mostrar como obter um texto randômico constituído por letras e números. Utilize o da sua escolha, mas apenas um deles.

A seguir vamos criar uma imagem do tipo PNG. Na linha 21 informa-se que a página conterá um gráfico deste tipo indicando o header.

Na linha 22 criamos uma imagem com a função imagecreate(), cujos parâmetros são a largura e a altura da imagem em pixels. Caso esta função falhe, o script é abortado e a mensagem "Erro ao criar imagem" é mostrada. Esta imagem é como se fosse uma tela em branco à qual podemos adicionar linhas e caracteres e à qual também podemos atribuir propriedades de cor. As propriedades de cor são definidas com a função imagecolorallocate().

A primeira cor definida é a cor de fundo. Na linha 24 definimos esta cor em RGB de 255, 244 e 234 (a cor de fundo deste parágrafo).

A cor da fonte é laranja, definido com RGB 255, 128, 0.

A cor das linhas é salmão, RGB 255, 200, 150.

A cor das bordas é a mesma cor da fonte. Uma vez definidas as cores podemos começar a criar as linhas. Para criar as linhas verticais usamos um loop que chama a função imageline(). Estas linhas são desenhadas em intervalos de 10 pixels. Os parâmetros são: a tela da imagem que já foi criada ($im), início da linha ($x=10, 20, etc e y=0), o fim da linha ($x=10, 20, etc e y=50) e a cor da linha.

Na linha de código 38 desenhamos uma linha horizontal que passa bem no meio da imagem e nas linhas 41 a 44 desenhamos a borda.

Agora só falta colocar o texto no captcha. Isto é feito usando a função imagestring() com os parâmetros: nossa imagem $im, o tamanho da fonte (pode ir de 1 a 5), a posição x na área da imagem, a posição y na área da imagem e a cor.

Neste ponto a imagem está pronta. Para colocá-la na tela usamos a função imagepng() dando como parâmetro a imagem.

Como a imagem criada na memória já foi apresentada na tela, não há motivo para continuar guardada. É sempre bom liberar a memória com a função imagedestroy().

Finalmentes

É isto aí, pessoal, taí uma imagem "fabricada" via programação. Podemos guardar o texto do captcha usando o expediente da session ou de cookies se quisermos recuperá-lo para uma comparação posterior.

Espero que tenham gostado do tuto.

Abraço da vó vovo Vicki

Última atualização ( Sex, 19.09.2008 20:36 )
 

Topo

Topo

Exceto onde especificamente citado, todo material deste site está sob Licença Creative Commons