Criar sistema de - Captcha
CAPTCHA é um acrônimo da expressão em língua inglesa "Completely Automated Public Turing test to tell Computers and Humans Apart" que pode ser traduzida como "Teste de Turing público e completamente automático para distinguir computadores e humanos.
Esta ferramenta tem o objetivo de determinar, mediante uma ou mais perguntas, se o utilizador é um ser humano e não um computador ou, mais precisamente, um bot (robôs que executam tarefas pré-programadas). O teste captcha mais comum é o que solicita que o usuário escreva uma série de letras ou números que aparecem num quadro, geralmente um pouco distorcidos ou ofuscados para evitar o reconhecimento por máquinas.
A biblioteca GD do PHP deve esta ativada
1º crie o arquivo gera.php com o seguinte conteúdo:
<?php$largura = 180;
$altura = 30;
$imagem = imagecreate($largura,$altura); // cria uma imagem
$letras = array('0','1','2','3','4','5','6','7','8','9'); // Coloque aqui o conteudo que deseja para aparecer na imagem
$tam_letras = count($letras)-1;
/*Fim possives letras*/
/*Cores da imagem*/
$cinza = imagecolorallocate($imagem,0xF8,0xF8,0xF8);
$cinza_escuro = imagecolorallocate($imagem,0xCC,0xCC,0xCC);
$vermelho = imagecolorallocate($imagem,0xFF,0x00,0x00);
$azul = imagecolorallocate($imagem,0x0F,0x93,0xFF);
$verde = imagecolorallocate($imagem,0x00,0x66,0x00);
$rosa = imagecolorallocate($imagem,0xFF,0x1A,0x98);
$preto = imagecolorallocate($imagem,0x00,0x00,0x00);
$marrom = imagecolorallocate($imagem,0xDC,0x91,0x3D);
$laranja = imagecolorallocate($imagem,0xFF,0x8C,0x24);
$cores = array($vermelho,$azul,$verde,$rosa,$preto,
$marrom,$laranja);
$tam_cores = count($cores)-1;
/*Fim das cores*/
/*Escrevendo linhas de fundo*/
$nro_linhas = 20;
for($i=0;$i<$nro_linhas;$i++){
$x1 = rand(0,$largura);
$x2 = rand(0,$largura);
$y1 = rand(0,$altura);
$y2 = rand(0,$altura);
imageline($imagem,$x1,$y1,$x2,$y2,$cinza_escuro);
}
/*Fim linhas de fundo*/
/*Escrevendo arcos de fundo*/
$nro_arcos = 20;
for($i=0;$i<$nro_arcos;$i++){
$cx = rand(0,$largura);
$w = rand(0,$largura);
$cy = rand(0,$altura);
$h = rand(0,$altura);
$s = rand(0,360);
$e = rand(0,360);
imagearc($imagem,$cx,$cy,$w,$h,$s,$e,$cinza_escuro);
}
/*Fim arcos de fundo*/
/*Escrevendo as Letras na imagem*/
$palavra = '';
$xPos = 0;
for($i=0;$i<6;$i++){
$xPos += rand(10,25);
$yPos = rand(10,15);
$j = rand(0,$tam_cores);
$k = rand(0,$tam_letras);
$palavra .= $letras[$k];
imagestring($imagem, 5, $xPos, $yPos, $letras[$k], $cores[$j]);
}
/*fim escrevendo letras na imagem*/
session_name('captcha');
session_start();
$_SESSION['palavra'] = $palavra;
header("Content-type: image/png");
imagepng($imagem);
imagedestroy($imagem);
?>
Agora vamos criar, no mesmo diretório, captcha.php:
<?php
session_name('captcha');
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Captcha</title>
<body>
<?php
if(isset($_POST['minhaPalavra'])){
if($_SESSION['palavra'] == $_POST['minhaPalavra'])
echo 'ok';
else
echo 'errado';
}
?>
<form action="checa.php" method="post">
<img src="gera.php">
<br>Verificação: <input type="text" name="minhaPalavra">
<input type="submit" name="ok" value="Ok">
</form>
</body>
</html>
o resultado será assim: