Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Langkah terperinci untuk menjana imej kod pengesahan menggunakan perpustakaan PHP dan GD

Langkah terperinci untuk menjana imej kod pengesahan menggunakan perpustakaan PHP dan GD

王林
王林asal
2023-07-13 08:01:501079semak imbas

Langkah terperinci untuk menjana imej kod pengesahan menggunakan perpustakaan PHP dan GD

Kod pengesahan ialah mekanisme pengesahan keselamatan yang biasa digunakan yang boleh digunakan untuk menghalang program berniat jahat atau automasi robot. Serangan automatik boleh dicegah dengan berkesan dengan menghasilkan imej rawak yang memerlukan pengguna memasukkan kod pengesahan yang ditunjukkan dalam imej semasa log masuk atau mendaftar. Dalam artikel ini, kami akan memperkenalkan secara terperinci cara menggunakan pustaka PHP dan GD untuk menjana imej kod pengesahan.

Langkah 1: Pasang dan konfigurasikan pustaka GD
Mula-mula, pastikan persekitaran PHP anda telah memasang pustaka GD. Jika ia tidak dipasang, anda boleh memasangnya dengan mengedit fail php.ini atau menggunakan pengurus pakej sistem anda.

Langkah 2: Cipta fungsi penjanaan kod pengesahan
Buat fungsi dalam fail PHP untuk menjana imej kod pengesahan. Kami akan menggunakan fungsi pustaka GD untuk mencipta kanvas dan melukis teks rawak serta elemen pengalih padanya.

function generateCaptchaImage($width, $height, $length) {
    // 创建画布
    $image = imagecreatetruecolor($width, $height);
    
    // 定义背景色和文字颜色
    $bgColor = imagecolorallocate($image, 255, 255, 255);
    $textColor = imagecolorallocate($image, 0, 0, 0);
    
    // 填充背景色
    imagefill($image, 0, 0, $bgColor);
    
    // 生成随机字符串
    $characters = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
    $captcha = '';
    $strLength = strlen($characters);
    
    for ($i = 0; $i < $length; $i++) {
        $captcha .= $characters[rand(0, $strLength - 1)];
    }
    
    // 在画布上绘制随机字符串
    $fontSize = $height * 0.8;
    $fontFile = '/path/to/font.ttf'; // 替换为你自己的字体文件路径
    
    $textX = ($width - $length * $fontSize) / 2;
    $textY = ($height - $fontSize) / 2 + $fontSize;
    
    imagettftext($image, $fontSize, 0, $textX, $textY, $textColor, $fontFile, $captcha);
    
    // 添加干扰元素
    $lineColor = imagecolorallocate($image, 100, 100, 100);
    
    for ($i = 0; $i < 5; $i++) {
        imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $lineColor);
    }
    
    // 输出图像
    header('Content-Type: image/png');
    imagepng($image);
    imagedestroy($image);
    
    return $captcha;
}

Langkah 3: Panggil fungsi penjanaan kod pengesahan
Dalam fail PHP anda, hasilkan imej kod pengesahan dengan memanggil fungsi generateCaptchaImage di atas dan simpan nilai kod pengesahan dalam sesi atau kuki untuk Seterusnya pengesahan. generateCaptchaImage函数来生成验证码图片,并将验证码值存储在会话或Cookie中供后续验证。

session_start();

$captcha = generateCaptchaImage(150, 50, 6);
$_SESSION['captcha'] = $captcha;

步骤 4: 显示验证码图片
在HTML中,通过在a1f02c36ba31691bcfe87b2722de723b标签的src

<img src="captcha.php" alt="验证码">

Langkah 4: Paparkan imej kod pengesahan

Dalam HTML, paparkan imej kod pengesahan dengan menentukan fail PHP dalam atribut src bagi teg a1f02c36ba31691bcfe87b2722de723b .

session_start();

if ($_POST['captcha'] === $_SESSION['captcha']) {
    // 验证码正确
} else {
    // 验证码错误
}

Langkah 5: Sahkan input pengguna

Apabila pengguna menyerahkan borang, sahkan sama ada kod pengesahan yang dimasukkan oleh pengguna adalah konsisten dengan nilai kod pengesahan yang disimpan.

rrreee🎜Melalui langkah di atas, kami berjaya menghasilkan imej kod pengesahan menggunakan pustaka PHP dan GD, dan mengesahkan kod pengesahan melalui sesi atau kuki. Ini boleh menghalang serangan automatik dan meningkatkan keselamatan sistem dengan berkesan. Anda boleh menyesuaikan dan mengembangkannya untuk memenuhi keperluan anda, seperti menambah gangguan yang lebih kompleks atau menggunakan fon yang berbeza. Saya harap artikel ini dapat membantu anda memahami penjanaan kod pengesahan. 🎜

Atas ialah kandungan terperinci Langkah terperinci untuk menjana imej kod pengesahan menggunakan perpustakaan PHP dan GD. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn