Categoria
Códigos adicionados no site: 18
Temas para Código
Criando um Captcha Alternativo em PHP
Palavras-chaves: PHP, GDI, Image, Captcha, Validação |
Cadastro: 25/09/2025 00:35:37 | Atualização: 28/09/2025 20:01:32
Cadastro: 25/09/2025 00:35:37 | Atualização: 28/09/2025 20:01:32
private function captcha($width, $height, $fontsize, $stringsize)
{
try {
if (isset($_SESSION["captcha_string"])) {
unset($_SESSION["captcha_string"]);
}
$imagem = imagecreatetruecolor($width, $height) or die("Can't create image!"); // define a largura e a altura da imagem
//voce deve ter essa ou outra fonte de sua preferencia em sua pasta
$font = "fonts/KaushanScriptRegular.ttf"; //Local
$black = imagecolorallocate($imagem, 0, 0, 0); // define a cor preta
$white = imagecolorallocate($imagem, 255, 255, 255); // define a cor branca
$randcolor = imagecolorallocate($imagem, rand(0, 255), rand(10, 200), rand(0, 255)); // define a cor amarela
$roxo = imagecolorallocate($imagem, 184, 14, 164); // define a cor roxa
$pixel_color = imagecolorallocate($imagem, 0, 55, 255);
imagefill($imagem, 0, 0, $white);
imagecolortransparent($imagem, $white);
imagefilledrectangle($imagem, 0, 0, $width, $height, $white);
for ($i = 0; $i < 10000; $i++) {
imagesetpixel($imagem, rand() % $width, rand() % $height, $randcolor);
}
for ($i = 0; $i < 10; $i++) {
imageline($imagem, 0, rand() % $height, $width, rand() % 100, $roxo);
}
// define a captcha_string conforme a quantidade de letras definidas no parametro $stringsize=8;
$captcha_string = substr(str_shuffle("ABCDEFGHIJKLMNPQRSTUVYXWZ123456789"), 0, ($stringsize));
$_SESSION["captcha_string"] = $captcha_string; // atribui para a sessao a captcha_string gerada
for ($i = 1; $i <= $stringsize; $i++) {
imagettftext(
$imagem,
$fontsize,
rand(-25, 20),
($fontsize * $i),
($fontsize + 10),
$black,
$font,
substr($captcha_string, ($i - 1), 1)
);
// atribui as letras a imagem
}
imagepng($imagem) or die("Can't create image!"); // gera a imagem
imagedestroy($imagem); // limpa a imagem da memoria
} catch (\Throwable $th) {
throw $th;
}
}