Captcha Simples com PHP
Nesse artigo irei mostrar como construir um sistema de CAPTCHA em PHP para formulários que irá ajudar a proteger contra ataque de spams.
Nesse artigo irei mostrar como construir um sistema de CAPTCHA em PHP para formulários que irá ajudar a proteger contra ataque de spams.
Iremos construir 3 arquivos PHP e precisaremos de um arquivo de fonte.
index.php - Mostra o CAPTCHA e um caixa de texto para verificação.
captcha.php - Gera o CAPTCHA conforme as variaveis que são enviadas pelo index.php
validar.php - Verefica se o texto digitado na caixa de texto é igual ao guardado na sessão.
arial.ttf - Arquivo de fonte de sua preferencia, mas em nosso exemplo eu usarei o arial.ttf que você pode pegar da pasta de fontes de seu Windows "C:\WINDOWS\Fonts".
Vamos aos scripts:
Arquivo index.php
<!--
No campo src da tag img abaixo enviaremos 4 parametros via GET
l = largura da imagem
a = altura da imagem
tf = tamanho fonte das letras
ql = quantidade de letras do captcha
-->
<img src="captcha.php?l=150&a=50&tf=20&ql=5">
<!--
O texto digitado no campo abaixo sera enviado via POST para
o arquivo validar.php que ira vereficar se o que voce digitou é igual
ao que foi gravado na sessao pelo captcha.php
-->
<form action="validar.php" name="form" method="post">
<input type="text" name="palavra" />
<input type="submit" value="Validar Captcha" />
</form>
Arquivo captcha.php
<?php
session_start(); // inicial a sessao
header("Content-type: image/jpeg"); // define o tipo do arquivo
function captcha($largura,$altura,$tamanho_fonte,$quantidade_letras){
$imagem = imagecreate($largura,$altura); // define a largura e a altura da imagem
$fonte = "arial.ttf"; //voce deve ter essa ou outra fonte de sua preferencia em sua pasta
$preto = imagecolorallocate($imagem,0,0,0); // define a cor preta
$branco = imagecolorallocate($imagem,255,255,255); // define a cor branca
// define a palavra conforme a quantidade de letras definidas no parametro $quantidade_letras
$palavra = substr(str_shuffle("AaBbCcDdEeFfGgHhIiJjKkLlMmNnPpQqRrSsTtUuVvYyXxWwZz23456789"),0,($quantidade_letras));
$_SESSION["palavra"] = $palavra; // atribui para a sessao a palavra gerada
for($i = 1; $i <= $quantidade_letras; $i++){
imagettftext($imagem,$tamanho_fonte,rand(-25,25),($tamanho_fonte*$i),($tamanho_fonte + 10),$branco,$fonte,substr($palavra,($i-1),1)); // atribui as letras a imagem
}
imagejpeg($imagem); // gera a imagem
imagedestroy($imagem); // limpa a imagem da memoria
}
$largura = $_GET["l"]; // recebe a largura
$altura = $_GET["a"]; // recebe a altura
$tamanho_fonte = $_GET["tf"]; // recebe o tamanho da fonte
$quantidade_letras = $_GET["ql"]; // recebe a quantidade de letras que o captcha terá
captcha($largura,$altura,$tamanho_fonte,$quantidade_letras); // executa a funcao captcha passando os parametros recebidos
?>
Arquivo validar.php
<?php
session_start();
if ($_POST["palavra"] == $_SESSION["palavra"]){
echo "<h1>Voce Acertou</h1>";
}else{
echo "<h1>Voce nao acertou!</h1>";
echo "<a href='index.php'>Retornar</a>";
}
?>
Agora coloque o arquivo da fonte na pasta onde estão esses 3 arquivos. Caso você não utilize a arial.ttf modifique a variavel $fonte no arquivo captcha.php.
Pronto! Bom trabalho para todos!
Iremos construir 3 arquivos PHP e precisaremos de um arquivo de fonte.
index.php - Mostra o CAPTCHA e um caixa de texto para verificação.
captcha.php - Gera o CAPTCHA conforme as variaveis que são enviadas pelo index.php
validar.php - Verefica se o texto digitado na caixa de texto é igual ao guardado na sessão.
arial.ttf - Arquivo de fonte de sua preferencia, mas em nosso exemplo eu usarei o arial.ttf que você pode pegar da pasta de fontes de seu Windows "C:\WINDOWS\Fonts".
Vamos aos scripts:
Arquivo index.php
<!--
No campo src da tag img abaixo enviaremos 4 parametros via GET
l = largura da imagem
a = altura da imagem
tf = tamanho fonte das letras
ql = quantidade de letras do captcha
-->
<img src="captcha.php?l=150&a=50&tf=20&ql=5">
<!--
O texto digitado no campo abaixo sera enviado via POST para
o arquivo validar.php que ira vereficar se o que voce digitou é igual
ao que foi gravado na sessao pelo captcha.php
-->
<form action="validar.php" name="form" method="post">
<input type="text" name="palavra" />
<input type="submit" value="Validar Captcha" />
</form>
Arquivo captcha.php
<?php
session_start(); // inicial a sessao
header("Content-type: image/jpeg"); // define o tipo do arquivo
function captcha($largura,$altura,$tamanho_fonte,$quantidade_letras){
$imagem = imagecreate($largura,$altura); // define a largura e a altura da imagem
$fonte = "arial.ttf"; //voce deve ter essa ou outra fonte de sua preferencia em sua pasta
$preto = imagecolorallocate($imagem,0,0,0); // define a cor preta
$branco = imagecolorallocate($imagem,255,255,255); // define a cor branca
// define a palavra conforme a quantidade de letras definidas no parametro $quantidade_letras
$palavra = substr(str_shuffle("AaBbCcDdEeFfGgHhIiJjKkLlMmNnPpQqRrSsTtUuVvYyXxWwZz23456789"),0,($quantidade_letras));
$_SESSION["palavra"] = $palavra; // atribui para a sessao a palavra gerada
for($i = 1; $i <= $quantidade_letras; $i++){
imagettftext($imagem,$tamanho_fonte,rand(-25,25),($tamanho_fonte*$i),($tamanho_fonte + 10),$branco,$fonte,substr($palavra,($i-1),1)); // atribui as letras a imagem
}
imagejpeg($imagem); // gera a imagem
imagedestroy($imagem); // limpa a imagem da memoria
}
$largura = $_GET["l"]; // recebe a largura
$altura = $_GET["a"]; // recebe a altura
$tamanho_fonte = $_GET["tf"]; // recebe o tamanho da fonte
$quantidade_letras = $_GET["ql"]; // recebe a quantidade de letras que o captcha terá
captcha($largura,$altura,$tamanho_fonte,$quantidade_letras); // executa a funcao captcha passando os parametros recebidos
?>
Arquivo validar.php
<?php
session_start();
if ($_POST["palavra"] == $_SESSION["palavra"]){
echo "<h1>Voce Acertou</h1>";
}else{
echo "<h1>Voce nao acertou!</h1>";
echo "<a href='index.php'>Retornar</a>";
}
?>
Agora coloque o arquivo da fonte na pasta onde estão esses 3 arquivos. Caso você não utilize a arial.ttf modifique a variavel $fonte no arquivo captcha.php.
Pronto! Bom trabalho para todos!


Daniel Castro Machado
em 10/7/2011 16:06 - Responder
Opa! Show de bola seu post. Eu vou usar esse captcha no meu site, que vai ser um grande site e logo você vai conhecer. Provavelmente o nome será WebFing. Valeu!
em 10/7/2011 16:06 - Responder


Renato Rodrigo Chinaglia
em 8/12/2011 15:23 - Responder
Muito bom !!! =D
em 8/12/2011 15:23 - Responder
[Este post ainda não foi associado a uma sequência]
Você está em:
canal PHP
Publicidade

Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL

0
0
Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!