terça-feira, 23 de julho de 2013

Captcha com PHP

Pessoal, boa tarde.
Para quem procura uma validação com captcha em php, segue uma que utilizo muito em meus desenvolvimentos:
Caso você se interesse mais pela biblioteca de imagens do php leia mais em:
http://www.php.net/manual/pt_BR/refs.utilspec.image.php
Nesta página há muito mais sobre processamento e geração de imagens, a biblioteca é nativa do PHP, no entanto, é bom verificar a disponibilidade das funções para sua versão PHP. 

Após esta dica, é só usar a criatividade para fazer a validação que quiser em seus formulários html.
Fiquem com Deus e sucesso a todooOOOS!
 



# PARA A CRIAÇÃO DE UMA VALIDAÇÃO DE FORMULÁRIO COM CAPTCHA EM PHP 
# DESENVOLVEREMOS DOIS ARQUIVOS:
# O PRIMEIRO É RESPONSÁVEL POR GERAR A IMAGEM (CAPTCHA)
# PRECISAREMOS DE UM TERCEIRO ARQUIVO DE FONT, O QUAL SERÁ USADO PARA ESCREVER O CAPTCHA
 
captcha.php
<?php

session_start();
 

# CRIA/DECLARA A IMAGEM DEFININDO LARGURA E ALTURA EM PIXELS
$image = imagecreate(200, 75);
 

# APLICA COR DE FUNDO À IMAGEM
$branco = imagecolorallocate($image, 255, 255, 255);
 

# CRIA UM ARRAY CONTENDO CÓDIGO DE CORES RGB PARA POSTERIORMENTE 
# ATRIBUIRMOS A ELIPSES QUE DESENHAREMOS NA IMAGEM
$elipseCores = array
(
    array(0,255,240),
    array(255,40,0),
    array(0,99,66),
    array(0,99,255),
    array(255,240,0)
);
 


# CRIA UM ARRAY CONTENDO CÓDIGO DE CORES RGB PARA POSTERIORMENTE 
# ATRIBUIRMOS A LINHAS QUE DESENHAREMOS NA IMAGEM

$linhasCores = array
(
    array(0,10,255),
    array(55,100,0),
    array(10,10,255),
    array(100,0,55),
    array(100,10,5),
    array(0,1,5),
    array(120,200,25),
    array(0,0,0)
);

# EXIBINDO VARIAS ELIPSES NA IMAGEM
for($i=1;$i<=20;$i++)
{
    $cor = $elipseCores[rand(0,4)];
    $corElipse = imagecolorallocate($image, $cor[0], $cor[1], $cor[2]);
    imagefilledellipse($image, rand(0,200), rand(10,100), rand(10,250), rand(0,70), $corElipse);
}

# EXIBINDO VARIAS LINHAS NA IMAGEM
 for($i=1;$i<=10;$i++)
{
    $cor = $
linhasCores [rand(0,7)];
    $corLinha = imagecolorallocate($image, $cor[0], $cor[1], $cor[2]);
    imageline($image, rand(0,200), rand(0,75), rand(0,200), rand(0,75), $corLinha);
}



# IMAGEM PREPARADA! AGORA VAMOS ESCREVER O TEXTO DO CAPTCHA SOBRE ESTA IMAGEM
settype($captcha, 'string');

for($j=0;$j<=5;$j++)
{
    $captcha .= $j%2 == 0 ? chr(rand(65,90)) : chr(rand(48,57));
}

$corTexto = imagecolorallocate($image, 0, 0, 0);


# GUARDAMOS O TEXTO SORTEADO EM UMA VARIÁVEL DE SESSÃO PARA VALIDAÇÃO FUTURA

$_SESSION['imgCaptcha'] = $captcha;







# ESCREVENDO TEXTO NA IMAGEM, ** AQUI UTILIZA O ARQUIVO DE FONT
for($j = 0 ; $j < strlen($captcha) ; $j++)
{
    imagettftext($image, rand(26,42), rand(-10,10), ($j * 30)+16, rand(55,68), $corTexto, '../fontes/arial.ttf', $captcha[$j]);
}

# GERA A IMAGEM

imagepng($image);


# LIBERA A MEMORIA

imagedestroy($image);

?>


 

# O SEGUNDO ARQUIVO DESENVOLVIDO CONTÉM O FORMULARIO E FAZ SUA VALIDAÇÃO
formulario.php
<?php

if(isset($_POST['enviar']))
{
    session_start();


    if($_SESSION['imgCaptcha'] == strtoupper($_POST['captcha']))
        print "Parabéns você digitou corretamente!";
    else
        print "A digitação não confere com os caracteres exibidos na imagem<br>Por favor, digite novamente";
}


?>


<html>
    <head>

       <title>
        CAPTCHA COM PHP, por Dominus Farib
       </title>
    </head>
    <body>
        <form action="" method="post">
        <h1>Digite os caracteres da imagem</h1>
        <p><img alt="CAPTCHA" src="captha.php"> </p>
        <p><input type="text" name="captcha"></p>
        <p><input type="submit" name="enviar" value="VALIDAR"> </p>
        </form>
    </body>
</html>


Nenhum comentário:

Postar um comentário

Palavrões e comentários não agregadores de valores e conhecimentos serão descartados