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);$n_color = imagecolorallocate($image, 120, 160, 180);
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:
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 » Meu Mural » Competiva - Criação de Sites » Todos os Direitos Reservados © 2002/2010 |