Olá! Sexta Feira, 10 de Fevereiro de 2012.



Dicas CódigoFonte.net
Quarta Feira, 07 de Outubro de 2009

Aprenda a fazer uma captcha (imagem de segurança)

Ai pessoal, beleza ?

Como primeiro tutorial ensinarei a fazer captchas igual a essa:

Clique para ver a imagem em seu tamanho real

Para funcionar corretamente é necessário PHP4 ou superior, a biblioteca GD

E de algumas fontes para dá esse efeito nas letras: download das fontes

Iremos criar uma página chamada captcha.php, que gerarar a imagem;

Para guardar as letras da imagem, usaremos sesions, então no início do código terá:

session_start();

Agora criaremos uma função chamada captcha, com três argumentos:

$width, largura da imagem, com valor default 120

$height, altura da imagem com valor default 40 e

$ch, quantidade de caracteres na imagem com valor default 5

function captcha($width='120',$height='40',$ch='5') {

Para que o usuário não confunda os caracteres, criaremos uma váriavel contendo os caracteres possiveis:

$pos = '23456789bcdfghjkmnpqrstvwxyz'; 

No caso, retirei a letra l e o número 1, vocês podem escolhar quais querem

Agora criaremos o código, dando um loop:

$i = 0;
$code = "";
while ($i < $ch) { 
  $code .= substr($pos, mt_rand(0, strlen($pos)-1), 1);
  $i++;
}

Criaremos a imagem, definiremos o tamanho da fonte, cor do texto,a cor do fundo e a cor dos rabiscos:

$font_size = $height * 0.6;
$image = imagecreate($width, $height);
$bg_color = imagecolorallocate($image,240,247,255);
$text_color = imagecolorallocate($image, 0, 0, 150);<p>$n_color = imagecolorallocate($image, 120, 160, 180);<br> </p>

Agora "riscaremos" a imagem:

for($i=0; $i<($width*$height)/3; $i++){
    imagefilledellipse($image, 
    mt_rand(0,$width), 
    mt_rand(0,$height), 1, 1, $n_color);
}
for( $i=0; $i<($width*$height)/160; $i++ ) {
   imageline($image,mt_rand(0,$width),mt_rand(0,$height),
   mt_rand(0,$width),mt_rand(0,$height), $n_color);
}

    Usaremos mais de uma fonte, criarei um array com as fontes outro para guardar qual fonte usar em cada caracter e outro para guardar a "altura" do caracter:

   

$font = array("1.ttf","2.ttf","3.ttf",
              "4.ttf","5.ttf","6.ttf");
$rand = array($characters);
$rand2 = array($characters);

Medimos onde cada caracter fica, para depois centralizar:

$ii = 0;
$x = 0;
$y = $height;
while($ii < $ch){
  $ver = substr($code,$ii,1);
  $f = mt_rand(0,count($font)-1);
  $rand[$ii] = $f;
  $rand2[$ii] = $x;
  $textbox = imagettfbbox($font_size,0,$font[$f], $ver);
  $y = ($y>($height - $textbox[5])/2) ? 
  ($height - $textbox[5])/2 : $y;
  $x += $textbox[4] + 4;
  $ii++;
}

Caso a largura de todos os caracteres seja maior que a largura da imagem, fazemos outra:

if($x - 4 > $width){
   captcha($width,$height,$characters);
   exit;
}

 Agora colocamos os caracteres na imagem:

$x = ($width - $x)/2;
$i = 0;
while($i < $characters){
  imagettftext($image, $font_size, 0, 
  ($rand2[$i] + $x), 30, 
  $text_color, $font[$rand[$i]], substr($code,$i,1));
  $i++;
}

Definimos a imagem como uma png e mostramos ao navegador:

header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

Agora guardamos os caracteres em um sesion para depois ser verificado:

$_SESSION["seguranca"] = $code;

Por fim fechamos a função e chamamos ela:

}
$width = isset($_GET['width']) ? $_GET['width'] : '120';
$height = isset($_GET['height']) ? $_GET['height'] : '40';
$ch = isset($_GET['ch']) ? $_GET['ch'] : '5';
captcha($width,$height,$ch)

Lembrando, para colocar a captcha na sua pagina coloque:

<img src="captcha.php?width=largura&height=altura&ch=
quantidade_de_caracteres" alt="" />

E para verificar se o usuário digitou corretamente, coloqueno início:

session_start();

E verifique mais ou menos assim:

if($_SESSION["seguranca"] != $POST["campo"]){
exit("Caracteres incorretos!");
}

Até o próximo tutorial pessoal

Comentários do artigo [Novo comentário]

Emmanuel - 09 de Outubro de 2009 - 08:28
Excelente artigo Lucas, parabéns ;-)
PROFESSOR MARTINS - 26 de Janeiro de 2010 - 09:23
Amigo, bom dia!!

Gostei desta dica muito util e simples, parabens
Mateus - 21 de Fevereiro de 2010 - 20:39
O que é biblioteca GD?
Fabio Marques Theophilo - 28 de Março de 2010 - 19:36
Muito bom esse tutorial !! Muito bem explicado e muito bem pensado. Adorei !! =D
lucas.exe - 29 de Março de 2010 - 19:01
Obrigado pelos coment?os.

Matheus,
A GD permite criar e editar imagens.

Normalmente em servidores ela j?em incluida com o php.

Caso voc?steja usando o php no seu proprio computador voc?ode instalar:

http://www.php.net/manual/pt_BR/image.requirements.php
Mateus Souza - 05 de Outubro de 2010 - 05:34
Parabéns Lucas sou iniciante em Web mas gostei muito da sua dica de captcha..
Marcio Lavinas Carvalho - 21 de Outubro de 2010 - 20:04
Excelente, essa dica que estara procurando para poder colocar num site que estou criando do zero.

http://www.mlcarvalhoinformatica.com.br
Skyline Redes e Servico de Informatica
Para adicionar um comentário você deve efetuar o login


Gostou do CódigoFonte.net? Quer indicar a um amigo?
Preencha os campos a seguir.
Seu Nome:
Seu E-mail:
E-mail de seu Amigo:






CodigoFonte.net » CodigoFonte.eti.br » Compre De Tudo » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010

Procurando Notebooks, Câmeras Digitais, iPhones?

CompreDeTudo.com