Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menjana kod pengesahan dinamik menggunakan perpustakaan PHP dan GD

Cara menjana kod pengesahan dinamik menggunakan perpustakaan PHP dan GD

WBOY
WBOYasal
2023-06-25 14:16:291042semak imbas

Dengan penekanan yang semakin meningkat pada keselamatan rangkaian, kod pengesahan dinamik telah menjadi alat biasa untuk pendaftaran tapak web, log masuk dan operasi lain. Dengan menukar kod pengesahan berulang kali, serangan berniat jahat oleh program automatik boleh dicegah dengan berkesan. Sebagai bahasa pembangunan bahagian belakang yang popular, perpustakaan GD terbina dalam PHP menyediakan fungsi biasa untuk menjana dan memproses imej, dan boleh menjana kod pengesahan dinamik dengan mudah.

Jadi, bagaimana untuk menjana kod pengesahan dinamik menggunakan perpustakaan PHP dan GD? Seterusnya, mari kita perkenalkan langkah demi langkah.

1. Pasang perpustakaan GD

Pertama pastikan perpustakaan GD telah dipasang pada pelayan. Jika anda menggunakan sistem Linux, anda boleh memasangnya melalui arahan terminal:

sudo apt-get install php7.0-gd

Antaranya, 7.0 sepadan dengan versi PHP semasa, yang boleh dilaraskan mengikut situasi sebenar anda.

2. Hasilkan teks kod pengesahan

Seterusnya, anda perlu menjana teks kod pengesahan rawak. Anda boleh menggunakan fungsi rand() PHP untuk menjana rentetan nombor dan huruf rawak, contohnya: rand()函数生成一串随机的数字和字母组合,例如:

$code = '';
for ($i = 0; $i < 4; $i++) {
    $code .= chr(rand(65, 90));
}

上述代码中,chr()函数将ASCII码转换为对应的字符,所以rand(65,90)表示生成一个65到90之间的随机整数,即A到Z之间的字符。这里生成了4位的验证码,可以根据需要进行调整。

3. 创建画布

接下来需要创建一个画布,用来展示生成的验证码。可以通过imagecreatetruecolor()函数创建一个指定大小的真彩色图像:

$width = 100;
$height = 50;
$image = imagecreatetruecolor($width, $height);

上述代码中,设置了画布大小为100*50像素的真彩色图像。如果需要更改画布大小,可以根据实际需要进行调整。

4. 设定背景颜色

为了让验证码更加好看,可以通过imagecolorallocate()函数设置画布的背景颜色。例如:

// 设定背景颜色
$bg_color = imagecolorallocate($image, 255, 255, 255);  // 白色
imagefill($image, 0, 0, $bg_color);

上述代码中,将画布的背景颜色设定为白色。

5. 描绘验证码

接下来,需要将生成的验证码的每个字符描绘在画布上。可以使用imagettftext()函数,将每个字符描绘在画布上:

// 描绘验证码
for ($i = 0; $i < 4; $i++) {
    $font_size = 20;
    $font_angle = rand(-20, 20);
    $font_x = 10 + $i * ($width - 20) / 4;
    $font_y = $height / 2 + $font_size / 2;
    $font_color = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));
    imagettftext($image, $font_size, $font_angle, $font_x, $font_y, $font_color, 'arial.ttf', $code[$i]);
}

上述代码中,描绘了验证码中的每个字符。其中,$font_size表示字符大小,$font_angle表示字符旋转角度,$font_x$font_y表示字符在画布中的位置,$font_color表示字符颜色,arial.ttf表示字体文件。需要根据实际需要进行调整。

6. 输出验证码

最后一步,是将生成的验证码输出到前端页面。可以使用header()函数设定图片类型,然后使用imagepng()函数输出图片内容:

header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

上述代码中,使用header()函数设定图片类型,然后使用imagepng()函数将图片内容输出到页面上,并使用imagedestroy()rrreee

Dalam kod di atas, fungsi chr() menukarkan Kod ASCII kepada aksara sepadan, jadi rand(65,90) bermaksud menjana integer rawak antara 65 dan 90, iaitu aksara antara A dan Z. Kod pengesahan 4 digit dijana di sini dan boleh dilaraskan mengikut keperluan.

3. Cipta kanvas 🎜🎜 Seterusnya anda perlu mencipta kanvas untuk memaparkan kod pengesahan yang dijana. Anda boleh mencipta imej warna sebenar bagi saiz yang ditentukan melalui fungsi imagecreatetruecolor(): 🎜rrreee🎜Dalam kod di atas, imej warna sebenar dengan saiz kanvas 100*50 piksel ditetapkan. Jika anda perlu menukar saiz kanvas, anda boleh melaraskannya mengikut keperluan sebenar. 🎜🎜4. Tetapkan warna latar belakang🎜🎜Untuk menjadikan kod pengesahan lebih cantik, anda boleh menetapkan warna latar belakang kanvas melalui fungsi imagecolorallocate(). Contohnya: 🎜rrreee🎜Dalam kod di atas, warna latar belakang kanvas ditetapkan kepada putih. 🎜🎜5. Lukiskan kod pengesahan🎜🎜Seterusnya, anda perlu melukis setiap aksara kod pengesahan yang dijana pada kanvas. Anda boleh menggunakan fungsi imagettftext() untuk melukis setiap aksara pada kanvas: 🎜rrreee🎜Dalam kod di atas, setiap aksara dalam kod pengesahan dilukis. Antaranya, $font_size mewakili saiz aksara, $font_angle mewakili sudut putaran aksara, $font_x dan $font_y mewakili aksara Pada kedudukan dalam kanvas, $font_color mewakili warna aksara dan arial.ttf mewakili fail fon. Perlu diselaraskan mengikut keperluan sebenar. 🎜🎜6. Keluarkan kod pengesahan🎜🎜Langkah terakhir ialah untuk mengeluarkan kod pengesahan yang dijana ke halaman hujung hadapan. Anda boleh menggunakan fungsi header() untuk menetapkan jenis imej, dan kemudian gunakan fungsi imagepng() untuk mengeluarkan kandungan imej: 🎜rrreee🎜Dalam kod di atas, gunakan header() menetapkan jenis imej, kemudian menggunakan fungsi <code>imagepng() untuk mengeluarkan kandungan imej ke halaman dan menggunakan imagedestroy() berfungsi untuk melepaskan memori. 🎜🎜Dengan langkah di atas, anda boleh menggunakan perpustakaan PHP dan GD dengan mudah untuk menjana kod pengesahan dinamik. Sudah tentu, untuk memastikan keselamatan, mekanisme pengesahan yang sepadan perlu ditambahkan pada halaman hadapan untuk mengelakkan serangan berniat jahat. 🎜

Atas ialah kandungan terperinci Cara menjana kod pengesahan dinamik 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