关于Thinkphp3.2的计算型验证码的解析
本篇文章主要介绍了Thinkphp3.2实用篇之计算型验证码示例,内容挺不错的,现在分享给大家,也给大家做个参考。
是不是觉得普通的验证码已经没办法满足,接下来介绍如何将tp现有的验证码改为计算型验证码:
首先找到:ThinkPHP\Library\Think\Verify.class.php
在其中加入以下代码:
public function entry_add($id = '') { $this->length='3'; // 图片宽(px) $this->imageW || $this->imageW = $this->length*$this->fontSize*1.5 + $this->length*$this->fontSize/2; // 图片高(px) $this->imageH || $this->imageH = $this->fontSize * 2.5; // 建立一幅 $this->imageW x $this->imageH 的图像 $this->_image = imagecreate($this->imageW, $this->imageH); // 设置背景 imagecolorallocate($this->_image, $this->bg[0], $this->bg[1], $this->bg[2]); // 验证码字体随机颜色 $this->_color = imagecolorallocate($this->_image, mt_rand(1,150), mt_rand(1,150), mt_rand(1,150)); // 验证码使用随机字体 $ttfPath = dirname(__FILE__) . '/Verify/' . ($this->useZh ? 'zhttfs' : 'ttfs') . '/'; if(empty($this->fontttf)){ $dir = dir($ttfPath); $ttfs = array(); while (false !== ($file = $dir->read())) { if($file[0] != '.' && substr($file, -4) == '.ttf') { $ttfs[] = $file; } } $dir->close(); $this->fontttf = $ttfs[array_rand($ttfs)]; } $this->fontttf = $ttfPath . $this->fontttf; if($this->useImgBg) { $this->_background(); } if ($this->useNoise) { // 绘杂点 $this->_writeNoise(); } if ($this->useCurve) { // 绘干扰线 $this->_writeCurve(); } // 绘验证码 $code = array(); // 验证码 $symbol=array('+','-'); $codeNX = 0; // 验证码第N个字符的左边距 $now_symbol=$symbol[rand(0,1)]; for ($i = 0; $i<$this->length; $i++) { if($i==1){ $code[$i] = $now_symbol; $codeNX += mt_rand($this->fontSize*1.2, $this->fontSize*1.6); imagettftext($this->_image, $this->fontSize,0, $codeNX, $this->fontSize*1.6, $this->_color, $ttfPath.'2.ttf', $code[$i]); } else{ $code[$i] = $this->codeSet[mt_rand(0, strlen($this->codeSet)-1)]; $codeNX += mt_rand($this->fontSize*1.2, $this->fontSize*1.6); imagettftext($this->_image, $this->fontSize, mt_rand(-40, 40), $codeNX, $this->fontSize*1.6, $this->_color, $this->fontttf, $code[$i]); } } // 保存验证码 $key = $this->authcode($this->seKey); $str=implode('', $code); eval("\$re=$str;"); $code = $this->authcode($re); $secode = array(); $secode['verify_code'] = $code; // 把校验码保存到session $secode['verify_time'] = NOW_TIME; // 验证码创建时间 session($key.$id, $secode); header('Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false); header('Pragma: no-cache'); header("content-type: image/png"); // 输出图像 imagepng($this->_image); imagedestroy($this->_image); }
public function check_add($code, $id = '') { $key = $this->authcode($this->seKey).$id; // 验证码不能为空 $secode = session($key); if($code===false || empty($secode)) { return false; } //验证码是否是数字 if(!is_numeric($code)) { return false; } // session 过期 if(NOW_TIME - $secode['verify_time'] > $this->expire) { session($key, null); return false; } if($this->authcode($code) == $secode['verify_code']) { $this->reset && session($key, null); return true; } return false; }
生成方法:
Public function verify(){ import('ORG.Util.Verify'); $Verify = new Verify(); $Verify->useNoise = true; $Verify->codeSet = '0123456789'; $Verify->useCurve = false; $Verify->entry_add(); }
验证方法:
if (!check_verify($verify,'','add')) { $this->error('验证码错误!'); return; }
调用的公共方法:
// 检测输入的验证码是否正确,$code为用户输入的验证码字符串 function check_verify($code, $id = '',$type=''){ import('ORG.Util.Verify'); $verify = new Verify(); if($type='add'){ return $verify->check_add($code, $id); } else{ return $verify->check($code, $id); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Atas ialah kandungan terperinci 关于Thinkphp3.2的计算型验证码的解析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Apakah yang perlu saya lakukan jika Google Chrome tidak memaparkan imej kod pengesahan? Kadangkala anda memerlukan kod pengesahan untuk log masuk ke halaman web menggunakan Google Chrome. Sesetengah pengguna mendapati bahawa Google Chrome tidak dapat memaparkan kandungan imej dengan betul apabila menggunakan kod pengesahan imej. Apa yang patut dibuat? Editor di bawah akan memperkenalkan cara menangani kod pengesahan Google Chrome yang tidak dipaparkan. Saya harap ia akan membantu semua orang! Pengenalan kaedah: 1. Masukkan perisian, klik butang "Lagi" di penjuru kanan sebelah atas, dan pilih "Tetapan" dalam senarai pilihan di bawah untuk masuk. 2. Selepas memasuki antara muka baharu, klik pilihan "Tetapan Privasi dan Keselamatan" di sebelah kiri. 3. Kemudian klik "Tetapan Laman Web" di sebelah kanan

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Nombor maya boleh menerima kod pengesahan Selagi nombor telefon bimbit yang diisi semasa pendaftaran mematuhi peraturan dan nombor telefon bimbit boleh disambungkan seperti biasa, anda boleh menerima kod pengesahan SMS. Walau bagaimanapun, anda perlu berhati-hati apabila menggunakan nombor telefon mudah alih maya Sesetengah tapak web tidak menyokong pendaftaran nombor telefon mudah alih maya, jadi anda perlu memilih pembekal perkhidmatan nombor telefon mudah alih maya biasa.

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

Perbandingan prestasi rangka kerja Laravel dan ThinkPHP: ThinkPHP umumnya berprestasi lebih baik daripada Laravel, memfokuskan pada pengoptimuman dan caching. Laravel berfungsi dengan baik, tetapi untuk aplikasi yang kompleks, ThinkPHP mungkin lebih sesuai.

"Cadangan Pembangunan: Cara Menggunakan Rangka Kerja ThinkPHP untuk Melaksanakan Tugas Asynchronous" Dengan perkembangan pesat teknologi Internet, aplikasi Web mempunyai keperluan yang semakin tinggi untuk mengendalikan sejumlah besar permintaan serentak dan logik perniagaan yang kompleks. Untuk meningkatkan prestasi sistem dan pengalaman pengguna, pembangun sering mempertimbangkan untuk menggunakan tugas tak segerak untuk melaksanakan beberapa operasi yang memakan masa, seperti menghantar e-mel, memproses muat naik fail, menjana laporan, dsb. Dalam bidang PHP, rangka kerja ThinkPHP, sebagai rangka kerja pembangunan yang popular, menyediakan beberapa cara mudah untuk melaksanakan tugas tak segerak.

Langkah pemasangan ThinkPHP: Sediakan persekitaran PHP, Komposer dan MySQL. Buat projek menggunakan Komposer. Pasang rangka kerja dan kebergantungan ThinkPHP. Konfigurasikan sambungan pangkalan data. Hasilkan kod aplikasi. Lancarkan aplikasi dan lawati http://localhost:8000.
