PHP melaksanakan penjanaan dan pengesahan kod pengesahan imej
Dalam pembangunan tapak web, untuk mengelakkan serangan mesin berniat jahat atau pendaftaran automatik, kami sering menggunakan kod pengesahan imej untuk pengesahan. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menjana dan mengesahkan kod pengesahan imej, dan memberikan contoh kod khusus.
Kunci untuk menjana kod pengesahan gambar ialah menjana rentetan kod pengesahan rawak dan melukisnya pada gambar. Berikut ialah contoh kod untuk menjana kod pengesahan imej:
<?php session_start(); // 声明图片尺寸 $image_width = 100; $image_height = 40; // 创建图片资源 $image = imagecreatetruecolor($image_width, $image_height); // 生成背景颜色 $bg_color = imagecolorallocate($image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255)); imagefill($image, 0, 0, $bg_color); // 生成验证码字符串 $chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789'; $code = ''; for ($i = 0; $i < 4; $i++) { $code .= $chars[mt_rand(0, strlen($chars) - 1)]; } // 将验证码字符串保存到session中,用于验证 $_SESSION['captcha'] = $code; // 绘制验证码文字 $font_file = 'path_to_your_font.ttf'; // 替换为你自己的字体文件路径 $text_color = imagecolorallocate($image, 0, 0, 0); // 文字颜色为黑色 imagettftext($image, 20, 0, 10, 30, $text_color, $font_file, $code); // 输出图片 header('Content-Type: image/png'); imagepng($image); imagedestroy($image); ?>
Dalam kod di atas, mula-mula buat sumber imej dengan lebar dan ketinggian yang ditentukan melalui fungsi imagecreatetruecolor
dan kemudian gunakan fungsi imagecolorallocate
Hasilkan warna latar belakang dan isikan keseluruhan imej, kemudian gunakan fungsi imagettftext
pada kedudukan yang ditentukan untuk melukis rentetan kod pengesahan pada imej. Akhir sekali, imej yang dihasilkan dikeluarkan melalui fungsi imagepng
. imagecreatetruecolor
函数创建一个指定宽度和高度的图片资源,然后使用imagecolorallocate
函数生成背景颜色并填充整个图片,接着在指定位置使用imagettftext
函数将验证码字符串绘制到图片上。最后,将生成的图片通过imagepng
函数输出。
验证图片验证码需要与用户输入的验证码进行比较。以下是一个验证图片验证码的示例代码:
<?php session_start(); // 获取用户输入的验证码字符串 $user_input = $_POST['captcha']; // 获取保存在session中的验证码字符串 $server_code = $_SESSION['captcha']; // 验证用户输入的验证码与保存的验证码是否一致 if (strcasecmp($user_input, $server_code) === 0) { // 验证码正确,执行相应的操作 // ... echo "验证码正确"; } else { // 验证码错误,提示用户重新输入 echo "验证码错误"; } ?>
上述代码中,首先使用session_start
函数开启session,然后通过$_POST
超全局数组获取用户输入的验证码字符串,再使用$_SESSION
超全局数组获取保存在session中的验证码字符串。最后,通过strcasecmp
函数比较两个字符串是否相等,如果相等则表示验证码正确,执行相应的操作,如果不相等则表示验证码错误,提示用户重新输入。
通过以上两段代码,我们可以实现图片验证码的生成和验证。可以将生成图片验证码的代码保存为一个独立的文件,例如captcha.php
session_start
untuk membuka sesi, dan kemudian dapatkan input pengguna melalui $ _POST
tatasusunan super global Rentetan kod pengesahan, dan kemudian gunakan tatasusunan super global $_SESSION
untuk mendapatkan rentetan kod pengesahan yang disimpan dalam sesi. Akhir sekali, fungsi strcasecmp
digunakan untuk membandingkan sama ada dua rentetan adalah sama, ini bermakna kod pengesahan adalah betul dan operasi yang sepadan akan dilakukan. ini bermakna kod pengesahan adalah salah dan pengguna akan digesa untuk memasukkan semula. 🎜🎜Dengan dua keping kod di atas, kami boleh menjana dan mengesahkan kod pengesahan imej. Anda boleh menyimpan kod untuk menjana kod pengesahan imej sebagai fail berasingan, seperti captcha.php
Apabila anda perlu menjana kod pengesahan, anda boleh mengakses fail secara terus. Kod untuk mengesahkan kod pengesahan imej boleh diletakkan pada halaman pemprosesan penyerahan borang tertentu. 🎜🎜Saya harap kod sampel dalam artikel ini dapat membantu anda menjana dan mengesahkan kod pengesahan imej. Sudah tentu, dalam aplikasi sebenar, anda juga mungkin perlu menambah beberapa langkah keselamatan, seperti menambah talian gangguan, menyulitkan kod pengesahan, dsb. 🎜Atas ialah kandungan terperinci PHP melaksanakan penjanaan dan pengesahan kod pengesahan imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!