登录页面动态验证码的设置

2017-01-10 08:19:10来源:cnblogs.com作者:Asa0728人点击

第七城市

登录页面动态验证码的设置

采用php中创建对象的思想进行动态验证码的设置

1、创建出一个背景图片,用来存放动态码输出位置

 1       function createImage(){ 2         // 创建图片对象,并设置图片的宽高 imagecreatetruecolor 3         $this->image = imagecreatetruecolor($this->width, $this->height); 4         // 图片创建背景颜色 5         // rand(下界,上界), php中的随机数 6         $backgroundColor = imagecolorallocate($this->image, rand(225,255), rand(225, 255), rand(225,255)); 7         // 填充背景颜色 8         imagefill($this->image, 0, 0, $backgroundColor); 9         // 给验证码设置边框10         $borderColor = imagecolorallocate($this->image, 0, 0 , 0); // 黑色边框11         // 绘制边框12         imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $borderColor);13       }

2、设置动态码中的干扰信息,可以为(点, 线·······)

 

function setDisturbElement(){        // 随机生成干扰项的数量        $lineNumbers = rand(2, 4);        // 通过for循环循环生成每个干扰线        for ($i=0; $i < $lineNumbers; $i++) {          // 左上角到右下角          $x1 = rand(2, $this->width / 2);          $y1 = rand(2, $this->height / 2);          $x2 = rand($this->width/2, $this->width-2);          $y2 = rand($this->height/2, $this->height-2);          $color = imagecolorallocate($this->image, rand(100, 200), rand(100, 200), rand(100, 200));          // 绘制线条          imageline($this->image, $x1, $y1, $x2, $y2, $color);        }      }

 

 

 

 

3、生成验证码字符串中的字符串信息,并将其存储到本地的session中以便于信息的验证

 

 1 private function createCheckingCode(){ 2         $code = "0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDASZXCVBNM"; 3         // echo $code; 4         // 接受验证码的字符串 5         $string = ''; 6         for ($i=0; $i < $this->codeNumbers; $i++) { 7             $index = rand(0, (strlen($code) - 1)); 8             // echo $index; 9             $string .= substr($code, $index, 1); // 获取code字符串的下标为$index的字符,添加到String字符串中10         }11         return $string;12       }13       // 为图像设置验证码文本14       function setValidationCode(){15         for ($i=0; $i < $this->codeNumbers; $i++) {16             $x = rand(1, 4) + $this->width * $i / $this->codeNumbers;17             $y = rand(1, $this->height/4);18             $color= imagecolorallocate($this->image, rand(0,128), rand(0, 128), rand(0, 128));19             $fontSize = rand(6, 8);20             // 绘制文本21             imagestring($this->image,$fontSize, $x, $y, $this->checkingCode[$i], $color);22         }23       }24       // 存储验证码到session中25       function saveVcodeToSession(){26           include_once('session.php');27           $session  = new Session();28           $session->set('checkingCode', $this->checkingCode, 10);29       }

 

 

 

 

 

4、对生成的验证码进行前端输出

 

1 function outputImage(){2         $this->createImage(); // 绘制图片3         $this->setDisturbElement(); // 绘制线条4         $this->setValidationCode();  // 生成文本5         header("Content-Type:image/png"); // 设置文档输出类型, png类型 | jpg6         imagepng($this->image);7       }

 

 

完整代码

 

 1 <?php 2     // 要将验证码的码值保存在session,方便前端进行比对验证 3     session_start(); 4     /** 5      * 验证码生成类 6      */ 7     class Validationcode 8     { 9       // private ,私有成员,只限于内部使用10       private $width;11       private $height;12       private $codeNumbers; // 验证码的个数13       private $image; // 将来要输出的图像14       private $checkingCode; // 验证码字符串,将被保存在session数组中15       function __construct($width = 80, $height = 30, $codeNumbers = 4) // 如果不提供参数,则80, 30, 4 为默认值16       {17           $this->width        = $width;18           $this->height       = $height;19           $this->codeNumbers  = $codeNumbers;20           $this->checkingCode = $this->createCheckingCode(); // 随机生成验证码21           // echo $this->checkingCode;22       }23       // 创建背景图片函数24       function createImage(){25         // 创建图片对象,并设置图片的宽高 imagecreatetruecolor26         $this->image = imagecreatetruecolor($this->width, $this->height);27         // 图片创建背景颜色28         // rand(下界,上界), php中的随机数29         $backgroundColor = imagecolorallocate($this->image, rand(225,255), rand(225, 255), rand(225,255));30         // 填充背景颜色31         imagefill($this->image, 0, 0, $backgroundColor);32         // 给验证码设置边框33         $borderColor = imagecolorallocate($this->image, 0, 0 , 0); // 黑色边框34         // 绘制边框35         imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $borderColor);36       }37       // 设置干扰项38       function setDisturbElement(){39         // 随机生成干扰项的数量40         $lineNumbers = rand(2, 4);41         // 通过for循环循环生成每个干扰线42         for ($i=0; $i < $lineNumbers; $i++) {43           // 左上角到右下角44           $x1 = rand(2, $this->width / 2);45           $y1 = rand(2, $this->height / 2);46           $x2 = rand($this->width/2, $this->width-2);47           $y2 = rand($this->height/2, $this->height-2);48           $color = imagecolorallocate($this->image, rand(100, 200), rand(100, 200), rand(100, 200));49           // 绘制线条50           imageline($this->image, $x1, $y1, $x2, $y2, $color);51         }52       }53       // 对创建的验证码图片进行输出54       function outputImage(){55         $this->createImage(); // 绘制图片56         $this->setDisturbElement(); // 绘制线条57         $this->setValidationCode();  // 生成文本58         header("Content-Type:image/png"); // 设置文档输出类型, png类型 | jpg59         imagepng($this->image);60       }61       // 生成验证码字符串62       // 私有的函数63       private function createCheckingCode(){64         $code = "0123456789qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDASZXCVBNM";65         // echo $code;66         // 接受验证码的字符串67         $string = '';68         for ($i=0; $i < $this->codeNumbers; $i++) {69             $index = rand(0, (strlen($code) - 1));70             // echo $index;71             $string .= substr($code, $index, 1); // 获取code字符串的下标为$index的字符,添加到String字符串中72         }73         return $string;74       }75       // 为图像设置验证码文本76       function setValidationCode(){77         for ($i=0; $i < $this->codeNumbers; $i++) {78             $x = rand(1, 4) + $this->width * $i / $this->codeNumbers;79             $y = rand(1, $this->height/4);80             $color= imagecolorallocate($this->image, rand(0,128), rand(0, 128), rand(0, 128));81             $fontSize = rand(6, 8);82             // 绘制文本83             imagestring($this->image,$fontSize, $x, $y, $this->checkingCode[$i], $color);84         }85       }86       // 存储验证码到session中87       function saveVcodeToSession(){88           include_once('session.php');89           $session  = new Session();90           $session->set('checkingCode', $this->checkingCode, 10);91       }92     }93     $vcode = new Validationcode();94     $vcode->outputImage();95     $vcode->saveVcodeToSession();96  ?>
php

 

 

 

 

 

 

 

 

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台