本文实例讲述高中家长会家长发言稿了php实现的click captcha点击验证码类及其用法,是非常实用的功能。分享给大家供大家参考之用。具体如下:
一、需求:
现在常用的表单验证码大部分都是要用户输入为主,但这样对手机用户会不方便。
如果手机用户访问,可以不用输入,而是click某一位置便可确认验证码,这样就会方便很多。
二、原理:
1.使用php imagecreate创建png图象,在图中画n个圆弧,其中一个是完整的圆(验证用),将圆心坐标及半径记录入ssion。
2.在浏览器,当用户在验证码图片上点击时,记录点击的位置。
3.将用户点击的坐标与ssion记录的圆心坐标、半径比较,判断是否在圆中,如是则验证通过。
程序运行效果如下图所示:
三、实现方法:
clickcaptcha.class.php类文件如下:
<?php /** click captcha 验证码类 * date: 2013-05-04 * author: fdipzone * ver: 1.0 */ class clickcaptcha { // class start public $ss_name = 'm_captcha'; public $width = 500; public $height = 200; public $icon = 5; public $iconcolor = array(255, 255, 0); public $backgroundcolor = array(0, 0, 0); public $iconsize = 56; private $_img_res = null; public function __construct($ss_name=''){ if(ssion_id() == ''){ ssion_start(); } if($ss_name!=''){ $this->ss_name = $ss_name; // 设置ssion name } } /** 创建验证码 */ public function create(){ // 创建图象 $this->_img_res = imagecreate($this->width, $this->height); // 填充背景 imagecolorallocate($this->_img_res, $this->backgroundcolor[0], $this->backgroundcolor[1], $this->backgroundcolor[2]); // 分配颜色 $col_ellip = imagecolorallocate($this->_img_res, $this->iconcolor[0], $this->iconcolor[1], $this->iconcolor[2]); $minarea = $this->iconsize/2+3; // 混淆用图象,不完整的圆 for($i=0; $i<$this->icon; $i++){ $x = mt_rand($minarea, $this->width-$minarea); $y = mt_rand($minarea, $this->height-$minarea); $s = mt_rand(0, 360); $e = $s + 330; imagearc($this->_img_res, $x, $y, $this->iconsize, $this->iconsize, $s, $e, $col_ellip); } // 验证用图象,完整的圆 $x = mt_rand($minarea, $this->width-$minarea); $y = mt_rand($minarea, $this->height-$minarea); $r = $this->iconsize/2; imagearc($this->_img_res, $x, $y, $this->iconsize, $this->iconsize, 0, 360, $col_ellip); 古代节日 // 记录圆心坐标及半径 $this->captcha_ssion($this->ss_name, array($x, $y, $r)); // 生成图象 header("content-type: image/png"); imagepng($this->_img_res); imagedestroy($this->_img_res); exit(); } /** 检查验证码 * @param string $captcha 验证码 * @param int $flag 验证成功后 0:不清除ssion 1:清除ssion * @return boolean */ public function check($captcha, $flag=1){ if(trim($captcha)==''){ return fal; } if(!is_array($this->captcha_ssion($this->ss_name))){ return fal; } list($px, $py) = e踩线xplode(',', $captcha); list($cx, $cy, $cr) = $this->captcha_ssion($this->ss_name); if(ist($px) && is_numeric($px) && ist($py) && is_numeric($py) && ist($cx) && is_numeric($cx) && ist($cy) && is_numeric($cy) && ist($cr) && is_numeric($cr)){ if($this->pointinarea($px,$py,$cx,$cy,$cr)){ if($flag==1){ $this->captcha_ssion($this->ss_name,''); } return true; } } return fal; } /** 判断点是否在圆中 * @param int $px 点x * @param int $py 点y * @param int $cx 圆心x * @param int $cy 圆心y * @param int $cr 圆半径 * sqrt(x^2+y^2)<r */ private function pointinarea($px, $py, $cx, $cy, $cr){ $x = $cx-$px; $y = $cy-$py; return round(sqrt($x*$x + $y*$y))<$cr; } /** 验证码ssion处理方法 * @param string $name captcha ssion name * @param string $value * @return string */ private function captcha_ssion($name,$value=null){ if(ist($value)){ if($value!==''){ $_ssion[$name] = $value; }el{ unt($_s图片模块ession[$name]); } }el{ return ist($_ssion[$name])? $_ssion[$name] : ''; } } } // class end ?>
demo.php示例程序如下:
<?php ssion_start(); require('clickcaptcha.class.php'); if(ist($_get['get_captcha'])){ // get captcha $obj = new clickcaptcha(); $obj->create(); exit(); } if(ist($_post['nd']) && $_post['nd']=='true'){ // submit $name = ist($_post['name'])? trim($_post['name']) : ''; $captcha = ist($_post['captcha'])? trim($_post['captcha']) : ''; $obj = new clickcaptcha(); if($obj->check($captcha)){ echo 'your name is:'.$name; }el{ echo 'captcha not match'; } echo ' <a href="demo.php">back</a>'; }el{ // html ?> <!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loo.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; chart=utf-8"> <title> click captcha demo </title> <script type="text/javascript" src="jquery-1.6.2.min.js"></script> <script type="text/javascript"> $(function(){ $('#captcha_img').click(function(e){ var x = e.pagex - $(this).offt().left; var y = e.pagey - $(this).offt().top; $('#captcha').val(x+','+y); }) $('#btn').click(function(e){ if($.trim($('#name').val())==''){ alert('plea input name!'); return fal; } if($.trim($('#captcha').val())==''){ alert('plea click captcha!'); return fal; } $('#form1')[0].submit(); }) }) </script> </head> <body> <form name="form1" id="form1" method="ubuntu安装flashpost" action="demo.php" onsubmit="return fal"> <p>name:<input type="text" name="name" id="name"></p> <p>captcha:plea click full circle<br><img id="captcha_img" src="demo.php?get_captcha=1&t=<?=time() ?>" style="cursor:pointer"></p> <p><input type="submit" id="btn" value="submit"></p> <input type="hidden" name="nd" value="true"> <input type="hidden" name="captcha" id="captcha"> </form> </body> </html> <?php } ?>
本文完整源码点击此处本站下载。
希望本文所述对大家的php程序设计有所帮助。
本文发布于:2023-04-06 21:28:26,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/cdb43d59a0730016a4ab4aebbe119dff.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:php实现的click captcha点击验证码类实例.doc
本文 PDF 下载地址:php实现的click captcha点击验证码类实例.pdf
留言与评论(共有 0 条评论) |