Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua untuk menjana imej kod pengesahan berwarna-warni menggunakan perpustakaan PHP dan GD

Petua untuk menjana imej kod pengesahan berwarna-warni menggunakan perpustakaan PHP dan GD

WBOY
WBOYasal
2023-07-14 23:05:141597semak imbas

Petua untuk menjana imej kod pengesahan berwarna-warni menggunakan perpustakaan PHP dan GD

Pengenalan:
Kod pengesahan ialah teknologi keselamatan rangkaian biasa. Dengan menghendaki pengguna memasukkan kod pengesahan semasa log masuk, mendaftar atau menyerahkan borang, anda boleh menghalang serangan automatik daripada robot dan program berniat jahat dengan berkesan. Artikel ini akan memperkenalkan teknik menggunakan perpustakaan PHP dan GD untuk menjana imej kod pengesahan berwarna-warni, membantu pembangun menambah tahap kebolehcaman dan rasa artistik tertentu semasa membuat kod pengesahan.

1. Persediaan persekitaran
Sebelum anda mula, pastikan perpustakaan PHP dan GD telah dipasang dalam persekitaran pembangunan anda. Anda boleh memasang pustaka GD dengan memasukkan arahan berikut dalam terminal:

sudo apt-get update
sudo apt-get install php7.4-gd

2. Jana talian gangguan
Sebelum menjana kod pengesahan, kami boleh menjana beberapa talian gangguan terlebih dahulu untuk meningkatkan kerumitan dan kebolehbacaan kod pengesahan. Berikut ialah contoh kod untuk menjana talian gangguan:

// 创建一个画布
$width = 120;
$height = 40;
$image = imagecreatetruecolor($width, $height);

// 生成两条随机干扰线
for ($i = 0; $i < 2; $i++) {
    $lineColor = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
    imageline($image, 0, mt_rand(0, $height), $width, mt_rand(0, $height), $lineColor);
}

// 输出图片
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);

3. Jana kod pengesahan
Seterusnya, kita boleh mula menjana kod pengesahan. Berikut ialah contoh kod yang menjana kod pengesahan empat digit:

session_start();

$width = 120;
$height = 40;
$length = 4;
$font = 'path/to/your/font.ttf'; // 设置字体文件的路径

// 创建一个画布
$image = imagecreatetruecolor($width, $height);

// 设置背景颜色
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);

// 生成四位数字验证码
$code = '';
for ($i = 0; $i < $length; $i++) {
    $textColor = imagecolorallocate($image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200));
    $digit = mt_rand(0, 9);
    $code .= $digit;
    imagettftext($image, 20, mt_rand(-30, 30), ($width / $length) * $i + 10, ($height + 20) / 2, $textColor, $font, $digit);
}

// 保存验证码到session中
$_SESSION['captcha'] = $code;

// 输出图片
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);

4. Gunakan kod pengesahan
Dalam borang anda, anda boleh menambah kotak input untuk pengguna memasukkan kod pengesahan dan mengesahkan di latar belakang sama ada kod pengesahan yang dimasukkan oleh pengguna adalah Ia konsisten dengan kod pengesahan yang dijana sebelum ini. Berikut ialah contoh mudah:

<form action="submit.php" method="post">
    <label for="captcha">验证码:</label>
    <input type="text" id="captcha" name="captcha" required>
    <img src="captcha.php" alt="验证码">
    <input type="submit" value="提交">
</form>

dan sahkan kod pengesahan dalam submit.php:

session_start();

if ($_POST['captcha'] == $_SESSION['captcha']) {
    // 验证码正确,进行后续操作
} else {
    // 验证码错误,给出相应提示
}

Kesimpulan:
Artikel ini memperkenalkan teknik menggunakan perpustakaan PHP dan GD untuk menjana imej kod pengesahan berwarna-warni, dengan menjana garisan gangguan dan fon Rawak warna meningkatkan kerumitan dan kebolehbacaan kod pengesahan. Semoga petua ini akan membantu pembangun mencipta captcha yang lebih selamat dan cantik.

Atas ialah kandungan terperinci Petua untuk menjana imej kod pengesahan berwarna-warni 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