William Costa Rodrigues - Site Developer

Site pessoal, com postagens, desenhos, códigos, informações sobre ciências e tecnologia.

Home Novidades Postagens
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 | PHP
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;
        }
}