php口令无错误版不刷新换口令
发布时间:2023-05-31 10:47:13 所属栏目:PHP教程 来源:
导读:为了这个验证码,在网上找了N多的资料,发现那些网上的代码不是这错误就是那错误,还有些文章方法写得很粗,对一个新手来说,简直不知从何处下手,我真搞不懂他们为什么要贴出来,真是误人子弟!
下面我将修改后(
下面我将修改后(
|
为了这个验证码,在网上找了N多的资料,发现那些网上的代码不是这错误就是那错误,还有些文章方法写得很粗,对一个新手来说,简直不知从何处下手,我真搞不懂他们为什么要贴出来,真是误人子弟! 下面我将修改后(测试通过)的代码和方法写出来供大家参考: 第一步,新建一个code.PHP的文件,在code.PHP加入下面这些代码并保存 <?PHP /** * Verification Code Class * * Used to anti-spam base at PHP GD Lib * @author Eric * @version 1.0 * @copyright Ereesoft Inc. 2009 * @update 2009-05-14 22:32:05 * @example * session_sratr(); * $vcode = new Vcode(); * $vcode->setLength(5); * $_SESSION['vcode'] = $vcode->paint();// To be encrypted by MD5 */ class Vcode{ /** * @var $width The width of the image,auto Calculated 验证图片宽度,程序自动计算 */ private $width; /** * @var $height Image height 验证图片高度 */ private $height; /** * @var $length Verification Code lenght 验证码长度 */ private $length; /** * @var $bgColor Image background color default random 验证图片背景色 */ private $bgColor; /** * @var $fontColor The text color 验证码颜色 */ private $fontColor; /** * @var $dotNoise The number of noise 噪点数量 */ private $dotNoise; /** * @var $lineNoise The number of noise lines 干扰线数量 */ private $lineNoise; /** * @var $im image resource GD图像操作资源 */ private $im; /** * void Vcode::Vcode() * * The constructor */ public function Vcode(){ $this->dotNoise = 5;//初始化噪点数量 $this->lineNoise = 0;//初始化干扰线数量 } /** * void Vcode::setLength(integer $length) * * Set Verification Code length * @access public * @param integer $length; * @return void */ public function setLength($length){ $this->length = $length; } /** * void Vcode::setBgColor(string $bgColor) * * Set background color of the Verification Image * @access public * @param string $bgColor e.g.: #ffffff;可以直接使用css书写中的16进制写法,但不可简写 * @return void */ public function setBgColor($bgColor){ $this->bgColor = sscanf($bgColor,'#%2x%2x%2x'); } /** * void Vcode::setFontColor(string $fontgColor) * * Set text color of the Verification Image * @access public * @param string $fontColor e.g.: #ffffff;可以直接使用css书写中的16进制写法,但不可简写 * @return void */ public function setFontColor($fontColor){ $this->fontColor = sscanf($fontColor,'#%2x%2x%2x'); } /** * void Vcode::setDotNoise(integer $num) * * How many noise dots want to draw * @access public * @param integer $num Too much will lower performance * @return void */ public function setDotNoise($num){ $this->dotNoise = $num;//手动设置噪点数量后,会覆盖初始设置 } /** * void Vcode::setLineNoise(integer $num) * * How many noise lines want to draw * @access public * @param integer $num Too much will lower performance * @return void */ public function setLineNoise($num){ $this->lineNoise = $num;//手动设置干扰线数量后,会覆盖初始设置 } /** * String Vcode::randString() * * Create Random characters 生成随机字符串 * @access private * @return String */ private function randString(){ $string = strtoupper(md5(microtime().mt_rand(0,9))); return substr($string,$this->length); } /** * void Vcode::drawDot() * * Draw dots noise 根据制定的数量随机画噪点,噪点颜色也随机 * @access private */ private function drawDot(){ for($i=0; $i<$this->dotNoise; $i++){ $color = imagecolorallocate($this->im, mt_rand(0,255),255));//生成随机颜色 imagesetpixel($this->im, mt_rand(0,$this->width),$this->height), $color);//在随机生成的坐标上画噪点 } } /** * void Vcode::drawLine() * * Draw line noise 随机颜色随机画干扰线 * @access private */ private function drawLine(){ for($i=0; $i<$this->lineNoise; $i++){ $color = imagecolorallocate($this->im,255));//随机生成颜色 imageline($this->im, mt_rand(0, $color);//在随机生成的坐标上画干扰线 } } /** * String Vcode::paint() * * Create image and output * @access public * @return string The Verification Code to be encrypted by MD5 */ public function paint(){ if(empty($this->length)) $this->length = 4;//验证码默认长度为4 $this->width = $this->length*12+4 ;//计算验证图片宽度 $this->height = 20;//制定验证码图片高度 $this->im = imagecreate($this->width,$this->height);//创建画布 if(empty($this->bgColor) || empty($this->fontColor)){//如果没有设置前景色和背景色则全部随机 //避免前景色和背景色过于接近,背景色(0-130)的随机范围与前景色(131-255)分开 imagecolorallocate( $this->im, mt_rand(0,130),130)); $randString = $this->randString(); for($i=0; $i<$this->length; $i++){ $fontColor = imagecolorallocate($this->im, mt_rand(131,255)); imagestring($this->im,3, $i*10+8,8), $randString{$i}, $fontColor); //单个验证码字符高度随机,避免被OCR } } else {//如果设置了背景色和前景色,则不使用随机颜色 imagecolorallocate( $this->im, $this->bgColor[0], $this->bgColor[1], $this->bgColor[2]); $randString = $this->randString(); $fontColor = imagecolorallocate($this->im, $this->fontColor[0], $this->fontColor[1], $this->fontColor[2]); for($i=0;$i<$this->length;$i++){ imagestring($this->im, $fontColor);//每个验证码字符高度仍然随机 $this->drawDot();//绘制噪点 $this->drawLine();//绘制干扰线 imagepng($this->im); imagedestroy($this->im); return md5($randString);//返回MD5加密后的验证码,可直接放入session } } session_start(); $vcode = new Vcode(); $vcode->setLength(5); $_SESSION['vcode']=$vcode->paint();// To be encrypted by MD5 ?> 第二步:在登陆页面login.PHP中调用验证码(注意:login.PHP和code.PHP 需放到同一个目录里面) //login.PHP里面的代码如下: <form id="form1" name="form1" method="post" action="test.PHP"> // test.PHP为提交后的验证页面 <input name="yzm" type="text" class="STYLE1" id="yzm" /> <img src="code.PHP?image" onclick="this.src='code.PHP?image'"/> <input name="Submit" type="submit" id="Submit" value="submit" /> </form> 最后一步:开始验证输入的验证码是否正确,如果不正确,则返回登录页面 //创建一个test.PHP的测试页面,里面的代码如下 <?PHP session_start(); //在页首先要开启session, //error_reporting(2047); session_destroy(); if($_POST[Submit]){ if(md5($_POST[yzm])==$_SESSION['vcode']){ echo ""; }else{ echo '<script>alert("验证码不正确,请重新输入!"); window.location.href="login.PHP"; </script>'; } } ?> 到此结束,百分百有效,绝不会出现乱码! (编辑:驾考网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
