Modul log masuk pengguna pembangunan PHP untuk mencipta kod pengesahan mudah
Fungsi kod pengesahan:
Secara berkesan menghalang penggodam daripada menggunakan program tertentu untuk memaksa pengguna berdaftar tertentu daripada membuat percubaan log masuk berterusan. Malah, kod pengesahan moden secara amnya menghalang mesin daripada mendaftar dalam kelompok dan menghalang mesin daripada menyiarkan balasan dalam kelompok. Pada masa ini, banyak tapak web menggunakan teknologi kod pengesahan untuk menghalang pengguna daripada menggunakan robot untuk mendaftar, log masuk dan spam secara automatik.
Apa yang dipanggil kod pengesahan ialah untuk menjana gambar daripada siri nombor atau simbol yang dijana secara rawak dan menambah beberapa piksel yang mengganggu pada gambar (untuk mengelakkan OCR), pengguna mengenali secara visual maklumat kod pengesahan, memasukkan borang dan menyerahkannya untuk pengesahan tapak web Hanya selepas pengesahan berjaya boleh digunakan fungsi tertentu.
Kod pengesahan kami yang paling biasa
1, empat digit, rentetan satu digit rawak, kod pengesahan paling asli, mempunyai hampir sifar kesan pengesahan.
2. Kod pengesahan gambar digital rawak. Watak-watak pada gambar agak teratur, ada yang mungkin ditambah interferon rawak, dan ada yang mempunyai warna aksara rawak, jadi kesan pengesahan lebih baik daripada yang sebelumnya. Orang yang tidak mempunyai pengetahuan asas tentang grafik dan imejan tidak boleh memecahkannya!
3. Nombor rawak dalam pelbagai format imej + huruf besar Inggeris rawak + piksel gangguan rawak + kedudukan rawak.
4. Aksara Cina ialah kod pengesahan terkini untuk pendaftaran Ia dijana secara rawak, yang menjadikannya lebih sukar untuk menaip dan menjejaskan pengalaman pengguna.
Demi kesederhanaan, objek utama penjelasan kami kali ini adalah jenis kedua. Mari lihat dahulu beberapa gambar jenis kod pengesahan ini yang lebih biasa di Internet
Keempat-empat ini styles pada dasarnya boleh Mewakili jenis kod pengesahan yang disebut dalam 2, pada mulanya nampaknya gambar pertama adalah yang paling mudah untuk retak, yang kedua adalah yang kedua, yang ketiga adalah lebih sukar, dan yang keempat adalah yang paling sukar.
Apakah keadaan sebenar? Sebenarnya, ketiga-tiga jenis imej ini sama sukar untuk dipecahkan.
Gambar pertama adalah yang paling mudah Latar belakang dan nombor gambar menggunakan warna yang sama, aksara adalah biasa dan aksara berada dalam kedudukan yang sama.
Gambar kedua nampaknya tidak mudah, tetapi jika anda mengkajinya dengan teliti, anda akan mendapati peraturannya Tidak kira bagaimana warna latar belakang dan interferon berubah, aksara pengesahan adalah tetap dan warna yang sama, jadi ia sangat mudah untuk dikecualikan. interferon, selagi ia adalah pigmen bukan watak.
Gambar ketiga nampaknya lebih rumit Selain warna latar belakang dan perubahan interferon seperti yang dinyatakan di atas, warna karakter pengesahan juga berubah, dan warna setiap karakter juga berbeza. Nampaknya mustahil untuk memecahkan kod pengesahan ini Artikel ini akan mengambil kod pengesahan jenis ini sebagai contoh Dalam gambar keempat, pelajar boleh menciptanya sendiri.
Gambar keempat, sebagai tambahan kepada ciri yang dinyatakan dalam gambar ketiga, menambah dua garis lurus kadar gangguan pada teks Nampaknya sukar, tetapi ia mudah untuk dialih keluar.
Terbitkan imej asas yang menghasilkan kod pengesahan imej png:
1. Hasilkan gambar png
2. Tetapkan warna latar belakang untuk gambar
3. Tetapkan warna dan gaya fon
Jana kod pengesahan rawak 4 digit. Laraskan sudut putaran dan kedudukan setiap aksara yang dijana dan lukiskannya pada imej png
6. Tambah bunyi dan garisan gangguan untuk menghalang mesin pendaftaran daripada menganalisis imej asal untuk pendaftaran berniat jahat
7. Keluarkan imej
8. Lepaskan imej Memori yang diduduki
Berikut ialah contoh kod pengesahan:
<?php //设置session,必须处于脚本最顶部 session_start(); $image = imagecreatetruecolor(100, 30); //1>设置验证码图片大小的函数 //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue); $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色 imagefill($image, 0, 0, $bgcolor); //10>设置变量 $captcha_code = ""; //7>生成随机数字 for($i=0;$i<4;$i++){ //设置字体大小 $fontsize = 6; //设置字体颜色,随机颜色 $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120)); //0-120深颜色 //设置数字 $fontcontent = rand(0,9); //10>.=连续定义变量 $captcha_code .= $fontcontent; //设置坐标 $x = ($i*100/4)+rand(5,10); $y = rand(5,10); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); } //10>存到session $_SESSION['authcode'] = $captcha_code; //8>增加干扰元素,设置雪花点 for($i=0;$i<200;$i++){ //设置点的颜色,50-200颜色比数字浅,不干扰阅读 $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200)); //imagesetpixel — 画一个单一像素 imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor); } //9>增加干扰元素,设置横线 for($i=0;$i<4;$i++){ //设置线的颜色 $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220)); //设置线,两点一线 imageline($image,rand(1,99), rand(1,29),rand(1,99), rand(1,29),$linecolor); } //2>设置头部,image/png header('Content-Type: image/png'); //3>imagepng() 建立png图形函数 imagepng($image); //4>imagedestroy() 结束图形函数 销毁$image imagedestroy($image); ?>Gaya paparan adalah seperti berikut: