Ai pessoal, beleza ?
Como primeiro tutorial ensinarei a fazer captchas igual a essa:
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

![]() |
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?