关于php Captcha 驗證碼類的讲解
<?php /** Captcha 驗證碼類 * Date: 2011-02-19 * Author: fdipzone */ class Captcha{ //class start private $sname = ''; public function __construct($sname=''){ // $sname captcha session name $this->sname = $sname==''? 'm_captcha' : $sname; } /** 生成验证码图片 * @param int $length 驗證碼長度 * @param Array $param 參數 * @return IMG */ public function create($length=4,$param=array()){ Header("Content-type: image/PNG"); $authnum = $this->random($length); //生成验证码字符. $width = isset($param['width'])? $param['width'] : 13; //文字宽度 $height = isset($param['height'])? $param['height'] : 18; //文字高度 $pnum = isset($param['pnum'])? $param['pnum'] : 100; //干扰象素个数 $lnum = isset($param['lnum'])? $param['lnum'] : 2; //干扰线条数 $this->captcha_session($this->sname,$authnum); //將隨機數寫入session $pw = $width*$length+10; $ph = $height+6; $im = imagecreate($pw,$ph); //imagecreate() 新建图像,大小为 x_size 和 y_size 的空白图像。 $black = ImageColorAllocate($im, 238,238,238); //设置背景颜色 $values = array( mt_rand(0,$pw), mt_rand(0,$ph), mt_rand(0,$pw), mt_rand(0,$ph), mt_rand(0,$pw), mt_rand(0,$ph), mt_rand(0,$pw), mt_rand(0,$ph), mt_rand(0,$pw), mt_rand(0,$ph), mt_rand(0,$pw), mt_rand(0,$ph) ); imagefilledpolygon($im, $values, 6, ImageColorAllocate($im, mt_rand(170,255),mt_rand(200,255),mt_rand(210,255))); //設置干擾多邊形底圖 /* 文字 */ for ($i = 0; $i < strlen($authnum); $i++){ $font = ImageColorAllocate($im, mt_rand(0,50),mt_rand(0,150),mt_rand(0,200));//设置文字颜色 $x = $i/$length * $pw + rand(1, 6); //设置随机X坐标 $y = rand(1, $ph/3); //设置随机Y坐标 imagestring($im, mt_rand(4,6), $x, $y, substr($authnum,$i,1), $font); } /* 加入干扰象素 */ for($i=0; $i<$pnum; $i++){ $dist = ImageColorAllocate($im, mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); //设置杂点颜色 imagesetpixel($im, mt_rand(0,$pw) , mt_rand(0,$ph) , $dist); } /* 加入干擾線 */ for($i=0; $i<$lnum; $i++){ $dist = ImageColorAllocate($im, mt_rand(50,255),mt_rand(150,255),mt_rand(200,255)); //設置線顏色 imageline($im,mt_rand(0,$pw),mt_rand(0,$ph),mt_rand(0,$pw),mt_rand(0,$ph),$dist); } ImagePNG($im); //以 PNG 格式将图像输出到浏览器或文件 ImageDestroy($im); //销毁一图像 } /** 檢查驗證碼 * @param String $captcha 驗證碼 * @param int $flag 驗證成功后 0:不清除session 1:清除session * @return boolean */ public function check($captcha,$flag=1){ if(empty($captcha)){ return false; }else{ if(strtoupper($captcha)==$this->captcha_session($this->sname)){ //檢測驗證碼 if($flag==1){ $this->captcha_session($this->sname,''); } return true; }else{ return false; } } } /* 产生随机数函数 * @param int $length 需要隨機生成的字符串數 * @return String */ private function random($length){ $hash = ''; $chars = 'ABCDEFGHIJKLMNPQRSTUVWXYZ23456789'; $max = strlen($chars) - 1; for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; } /** 驗證碼session處理方法 * @param String $name captcha session name * @param String $value * @return String */ private function captcha_session($name,$value=null){ if(isset($value)){ if($value!==''){ $_SESSION[$name] = $value; }else{ unset($_SESSION[$name]); } }else{ return isset($_SESSION[$name])? $_SESSION[$name] : ''; } } } // class end ?>
demo
<? session_start(); require_once('Captcha.class.php'); $obj = new Captcha($sname); # 創建Captcha類對象 # $sname為保存captcha的session name,可留空,留空則為'm_captcha' $obj->create($length,$param); # 創建Captcha并輸出圖片 # $length為Captcha長度,可留空,默認為4 /* $param = array( 'width' => 13 captcha 字符寬度 'height' => 18 captcha 字符高度 'pnum' => 100 干擾點個數 'lnum' => 2 干擾線條數 ) 可留空 */ $obj->check($captcha,$flag); # 檢查用戶輸入的驗證碼是否正確,true or false # $captcha為用戶輸入的驗證碼,必填 # $flag 可留空,默認為1 # 1:當驗證成功后自動清除captcha session # 0:當驗證成功后不清除captcha session,用於ajax檢查 ?>
本文讲解了关于php Captcha 驗證碼類的相关内容,更多相关知识请关注php中文网。
相关推荐:
Atas ialah kandungan terperinci 关于php Captcha 驗證碼類的讲解. 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



Masalah ditemui dalam masa tamat masa pengeluaran projek springboot Masalahnya diterangkan di bawah: Dalam persekitaran ujian, sesi keluar telah dikonfigurasikan dengan menukar aplikasi.yaml Selepas menetapkan masa yang berbeza untuk mengesahkan bahawa konfigurasi keluar sesi berkuat kuasa, masa tamat tempoh ditetapkan terus kepada 8 jam untuk dilepaskan. Walau bagaimanapun, saya menerima maklum balas daripada pelanggan pada waktu tengah hari bahawa masa tamat projek ditetapkan menjadi singkat Jika tiada operasi dilakukan selama setengah jam, sesi akan tamat tempoh dan memerlukan log masuk berulang. Selesaikan masalah pengendalian persekitaran pembangunan: projek springboot mempunyai Tomcat terbina dalam, jadi sesi keluar yang dikonfigurasikan dalam application.yaml dalam projek adalah berkesan. Persekitaran pengeluaran: Keluaran persekitaran pengeluaran ialah

Kegagalan sesi biasanya disebabkan oleh tamat tempoh seumur hidup sesi atau penutupan pelayan. Penyelesaian: 1. Memanjangkan hayat sesi; 2. Gunakan storan berterusan;

Fungsi bermaksud fungsi. Ia adalah blok kod yang boleh digunakan semula dengan fungsi tertentu Ia boleh menerima parameter input, melakukan operasi tertentu, dan mengembalikan hasil daripada blok yang boleh digunakan semula. kod untuk meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod.

Penyelesaian kepada masalah silang domain PHPSession Dalam pembangunan pemisahan front-end dan back-end, permintaan merentas domain telah menjadi kebiasaan. Apabila menangani isu merentas domain, kami biasanya melibatkan penggunaan dan pengurusan sesi. Walau bagaimanapun, disebabkan oleh sekatan dasar asal penyemak imbas, sesi tidak boleh dikongsi secara lalai merentas domain. Untuk menyelesaikan masalah ini, kita perlu menggunakan beberapa teknik dan kaedah untuk mencapai perkongsian sesi merentas domain. 1. Penggunaan kuki yang paling biasa untuk berkongsi sesi merentas domain

Penyelesaian kepada masalah bahawa sesi php hilang selepas menyegarkan: 1. Buka sesi melalui "session_start();" 2. Tulis semua konfigurasi awam dalam fail php 3. Nama pembolehubah tidak boleh sama dengan subskrip tatasusunan; 4. Dalam Hanya semak laluan penyimpanan data sesi dalam phpinfo dan semak sama ada sesio dalam direktori fail berjaya disimpan.

Masa tamat lalai PHP sesi ialah 1440 saat, iaitu 24 minit, yang bermaksud bahawa jika pelanggan tidak memuat semula selama lebih daripada 24 minit, sesi semasa akan tamat tempoh jika pengguna menutup penyemak imbas, sesi akan tamat dan Sesi tidak akan wujud lagi.

Masalah: Hari ini, kami menghadapi masalah tamat masa tetapan dalam projek kami dan perubahan pada application.properties SpringBoot2 tidak pernah berkuat kuasa. Penyelesaian: Pelayan.* sifat digunakan untuk mengawal bekas terbenam yang digunakan oleh SpringBoot. SpringBoot akan mencipta contoh bekas servlet menggunakan salah satu contoh ServletWebServerFactory. Kelas ini menggunakan sifat pelayan.* untuk mengkonfigurasi bekas servlet terkawal (tomcat, jeti, dsb.). Apabila aplikasi digunakan sebagai fail perang kepada contoh Tomcat, pelayan.* sifat tidak digunakan. Mereka tidak memohon,

1. Melaksanakan log masuk SMS berdasarkan sesi 1.1 Carta alir log masuk SMS 1.2 Melaksanakan penghantaran kod pengesahan SMS Perihalan permintaan hujung hadapan: Penerangan kaedah permintaan POST laluan permintaan/pengguna/kod parameter permintaan telefon (nombor telefon) nilai pulangan Tiada antara muka belakang pelaksanaan: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){/1
