萬能php驗證碼類,供大家參考,具體內容如下
code.php是驗證碼類,類的名稱最好和文件名的名稱一樣,這樣有利于我們的查看。
code.php
<?php header('Content-type:text/html;charset=utf8'); class Code{ // 驗證碼個數$number protected $number; // 驗證碼類型$codeType protected $codeType; // 驗證碼圖像寬度$width protected $width; // 驗證碼$height protected $height; // 驗證碼字符串$code protected $code; // 圖像資源$image protected $image; public function __construct($number=4,$codeType=0,$height=50,$width=100){ //初始化自己的成員屬性 $this->number=$number; $this->codeType=$codeType; $this->width = $width; $this->height= $height; //生成驗證碼函數 $this->code = $this ->createCode(); } public function __get($name){ if ($name == 'code'){ return $this->code; } return false; } /*獲取驗證碼*/ public function getCode() { return $this->code; } /*圖像資源銷毀*/ public function __destruct(){ imagedestroy($this->image); } protected function createCode(){ //通過你的驗證碼類型生成驗證碼 switch ($this->codeType){ case 0: //純數字 $code = $this->getNumberCode(); break; case 1: //純字母的 $code = $this->getCharCode(); break; case 2: //數字和字母混合 $code = $this->getNumCharCode(); break; default: die('不支持此類驗證碼類型'); } return $code; } protected function getNumberCode(){ $str = join('', range(0, 9)); return substr(str_shuffle($str),0, $this->number); } protected function getCharCode(){ $str = join('', range('a', 'z')); $str = $str.strtoupper($str); return substr(str_shuffle($str),0,$this->number); } protected function getNumCharCode(){ $numstr = join('',range(0, 9)); $str =join('', range('a', 'z')); $str =$numstr.$str.strtoupper($str); return substr(str_shuffle($str), 0,$this->number); } protected function createImage(){ $this->image = imagecreatetruecolor($this->width, $this->height); } protected function fillBack(){ imagefill($this->image, 0, 0, $this->lightColor()); } /*淺色*/ protected function lightColor(){ return imagecolorallocate($this->image, mt_rand(133,255), mt_rand(133,255), mt_rand(133,255)); } /*深色*/ protected function darkColor(){ return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120)); } protected function drawChar(){ $width = ceil($this->width / $this->number); for ($i=0; $i< $this->number;$i++){ $x = mt_rand($i*$width+5, ($i+1)*$width-10); $y = mt_rand(0, $this->height -15); imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor()); } } protected function drawLine(){ for ($i=0;$i<5;$i++) { imageline($this->image,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$this->darkColor()); } } protected function drawDisturb(){ for ($i=0;$i<150;$i++){ $x=mt_rand(0, $this->width); $y=mt_rand(0, $this->height); imagesetpixel($this->image, $x, $y, $this->lightColor()); } } protected function show(){ header('Content-Type:image/png'); imagepng($this->image); } public function outImage(){ // 創建畫布 $this->createImage(); // 填充背景色 $this->fillBack(); // 將驗證碼字符串花到畫布上 $this->drawChar(); // 添加干擾元素 $this->drawDisturb(); // 添加線條 $this->drawLine(); // 輸出并顯示 $this->show(); } }
test.php是new一個新的驗證碼,并把它保存到session中,為我們驗證碼的驗證起到保存和存儲的作用。
test.php
<?php //開啟session session_start(); require_once 'code.php'; $code= new Code(4,1,50,100); $_SESSION['code']= $code->getCode(); $code->outImage();
login.php就是最后的驗證。
login.php
<?php //開啟Session session_start(); //判斷是否提交 if(isset($_POST['dosubmit'])){ //獲取session中的驗證碼并轉為小寫 $sessionCode=strtolower($_SESSION['code']); //獲取輸入的驗證碼 $code=strtolower($_POST['code']); //判斷是否相等 if($sessionCode==$code){ echo "<script type='text/javascript'>alert('驗證碼正確!');</script>"; }else{ echo "<script type='text/javascript'>alert('驗證碼錯誤!');</script>"; } } ?> <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> <style type="text/css"> *{margin:0px;padding:0px;} ul{ width:400px; list-style:none; margin:50px auto; } li{ padding:12px; position:relative; } label{ width:80px; display:inline-block; float:left; line-height:30px; } input[type='text'],input[type='password']{ height:30px; } img{ margin-left:10px; } input[type="submit"]{ margin-left:80px; padding:5px 10px; } </style> </head> <body> <form action="login.php" method="post"> <ul> <li> <label>用戶名:</label> <input type="text" name="username"/> </li> <li> <label>密碼:</label> <input type="password" name="password"/> </li> <li> <label>驗證碼:</label> <input type="text" name="code" size="4" style="float:left"/> <img src="test.php" onclick="this.src='test.php?Math.random()'"/> </li> <li> <input type="submit" value="登錄" name="dosubmit"/> </li> </ul> </form> </body> </html>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。