首页 > 编程 > PHP > 正文

关于php Captcha 驗證碼類的讲解

2020-03-22 18:04:13
字体:
来源:转载
供稿:网友
private $sname = html' target='_blank'>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 。

相关推荐:

MySQL的information_schema 相关内容

查看mysql数据库大小、表大小和最后修改时间

详解Sublime Text 2

以上就是关于php Captcha 驗證碼類的讲解的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表