下麵是我今天下午用PHP寫的一個生成圖片驗證碼demo,僅供參考。這個demo總共分為4個文件,具體代碼如下: ...
下麵是我今天下午用PHP寫的一個生成圖片驗證碼demo,僅供參考。
這個demo總共分為4個文件,具體代碼如下:
1、code.html中的代碼:
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5 <title>登錄、註冊驗證碼生成</title> 6 </head> 7 <body> 8 <!-- 9 * @Description 網站登錄/註冊驗證碼生成類 10 * @Author 趙一鳴 11 * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html 12 * @Date 2016年10月6日 13 --> 14 <form action="checkcode.php" method="post"> 15 <input type="text" name="code" /><br/> 16 <img src="showcode.php" onclick="this.setAttribute('src','showcode.php?'+Math.random())" /> 17 <span>看不清?點擊圖片即可切換驗證碼</span><br/> 18 <input type="submit" name="sub" value="登錄/註冊" /> 19 </form> 20 </body> 21 </html>
2、createcode.class.php中的代碼:
1 <?php 2 /** 3 * @Description 網站登錄/註冊驗證碼生成類 4 * @Author 趙一鳴 5 * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html 6 * @Date 2016年10月6日 7 */ 8 class Createcode{ 9 //畫布資源 10 public $img; 11 //畫布寬度 12 private $img_width; 13 //畫布高度 14 private $img_height; 15 //畫布顏色 16 private $img_bgcolor; 17 //驗證碼文字內容 18 private $str_content; 19 //生成的驗證碼內容 20 private $code_content; 21 //驗證碼顏色 22 private $code_content_color; 23 //構造函數 24 public function __construct($img_width,$img_height,$str_content,$code_content_color){ 25 if($this->gdcheck()){ 26 $this->img_width = $img_width; 27 $this->img_height = $img_height; 28 $this->str_content = $str_content; 29 $this->code_content_color = $code_content_color; 30 $this->get_code(); 31 $this->session_code(); 32 } 33 } 34 //生成畫布 35 public function get_img(){ 36 //定義畫布 37 $this->img = imagecreatetruecolor($this->img_width, $this->img_height); 38 //畫布背景色 39 $this->img_bgcolor = imagecolorallocate($this->img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); 40 //給畫圖填充背景色 41 imagefill($this->img, 0, 0, $this->img_bgcolor); 42 //取得畫布的寬高 43 $img_width = imagesx($this->img); 44 $img_height = imagesy($this->img); 45 //畫布中插入驗證碼 46 imagestring($this->img, 5, ($this->img_width/3), ($this->img_height/2.5), $this->code_content, imagecolorallocate($this->img, hexdec(substr($this->code_content_color, 1,2)), hexdec(substr($this->code_content_color, 3,2)), hexdec(substr($this->code_content_color, 5,2)))); 47 //畫布中插入像素點 48 $this->get_pix(); 49 //畫布中插入直線 50 $this->get_line(); 51 //畫布顯示 52 header('Content-type:image/png'); 53 imagepng($this->img); 54 } 55 //生成驗證碼 56 private function get_code(){ 57 $str_content_len = strlen($this->str_content); 58 for($i=0;$i<4;$i++){ 59 $this->code_content .= substr($this->str_content, mt_rand(0,$str_content_len-1),1); 60 } 61 } 62 //生成像素點 63 private function get_pix(){ 64 for($j=0;$j<300;$j++){ 65 $image_pix .= imagesetpixel($this->img, mt_rand(0,$this->img_width), mt_rand(0,$this->img_height), imagecolorallocate($this->img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255))); 66 } 67 return $image_pix; 68 } 69 //生成直線 70 private function get_line(){ 71 for($l=0;$l<2;$l++){ 72 $img_line .= imageline($this->img, mt_rand(0,$this->img_width), mt_rand(0,$this->img_height), mt_rand(0,$this->img_width), mt_rand(0,$this->img_height), imagecolorallocate($this->img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255))); 73 } 74 return $img_line; 75 } 76 //session存儲驗證碼 77 private function session_code(){ 78 session_start(); 79 $_SESSION['code'] = $this->code_content; 80 } 81 //判斷程式是否支持GD庫 82 private function gdcheck(){ 83 if(extension_loaded('gd')){ 84 return true; 85 }else{ 86 return false; 87 exit(); 88 } 89 } 90 }
3、checkcode.php中的代碼:
<?php /** * @Description 網站登錄/註冊驗證碼生成類 * @Author 趙一鳴 * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html * @Date 2016年10月6日 */ header('Content-type:text/html;charset="utf-8"'); session_start(); if($_POST['code']!=''){ if($_SESSION['code']==$_POST['code']){ echo '<script type="text/javascript"> alert("驗證碼填寫成功"); history.go(-1); </script>'; }else{ echo '<script type="text/javascript"> alert("驗證碼填寫失敗"); history.go(-1); </script>'; } }
4、showcode.php中的代碼:
1 <?php 2 /** 3 * @Description 網站登錄/註冊驗證碼生成類 4 * @Author 趙一鳴 5 * @OnlineDemo http://www.zymseo.com/demo/verificationcode/code.html 6 * @Date 2016年10月6日 7 */ 8 function __autoload($classname){ 9 include strtolower($classname).'.class.php'; 10 } 11 //定義驗證碼的取值範圍 12 $str_content = 'abcdefghijklmnopqrstuvwxyz0123456789'; 13 //驗證碼文字顏色 14 $code_content_color = '#ffffff'; 15 //初始化對象 16 $code = new Createcode(100,30,$str_content,$code_content_color); 17 $code->get_img();
原文地址:http://www.zymseo.com/php/334.html
轉載請註明出處!