您好,登錄后才能下訂單哦!
前端頁面index.php
<?php header('content-type:text/html;charset=utf-8'); if(isset($_POST['dosubmit'])){ session_start(); if(strtoupper($_SESSION['code']) == strtoupper($_POST['code'])){ echo '輸入成功!<br/>'; }else{ echo '輸入不對<br/>'; } } ?> <form action="index.php" method="post"> 用戶名:<input type="text" name="username" value=""/><br/> 標題:<input type="text" name="title" value=""/><br/> 內容:<textarea name="content" cols="40" rows="4"></textarea><br/> 驗證碼:<input type="text" size="4" name="code"><img src="test.php" onclick ="this.src='test.php?'+Math.random()"/><br/> <input type="submit" name="dosubmit" value="留言"/> </form>
生成驗證碼圖片test.php
<?php //開啟session session_start(); require 'print.php';//導入驗證碼類文件 $vcode =new Vcode(80,30,4);//實例化驗證碼類 //將驗證碼放到服務器自己的空間保存一份 $_SESSION['code'] = $vcode->getCode(); //將驗證碼的圖片輸出 $vcode->outimg();//調用方法
驗證碼類 print.php
<?php class Vcode{ private $width; //寬 private $heigth; //高 private $num; //數量 private $code; //驗證碼 private $img; //圖像資源 //構造方法 function __construct($width=80,$height=25,$num=4){ $this->width = $width; $this->heigth = $height; $this->num = $num; $this->code = $this->createCode(); } //獲取字符的驗證碼 function getCode(){ return $this->code; } //輸出驗證碼圖形 function outimg(){ //創建背景 顏色 大小 邊框 $this->createBack(); //畫字 大小 字體顏色 $this->outString(); //干擾元素 點 線條 $this->setDisturb(); //輸出圖像 $this->printImg(); } //創建背景 private function createBack(){ //創建資源 $this->img = p_w_picpathcreatetruecolor($this->width, $this->heigth); //設置隨機背景顏色 $bgcolor = p_w_picpathcolorallocate($this->img, rand(225, 255), rand(225, 255), rand(225, 255)); //填充背景色 p_w_picpathfill($this->img, 0, 0, $bgcolor); //畫矩形 $bordercolor = p_w_picpathcolorallocate($this->img, 0, 0, 0); p_w_picpathrectangle($this->img, 0, 0, $this->width-1, $this->heigth-1, $bordercolor); } //畫字 private function outString(){ for($i=0;$i<$this->num;$i++){ $color = p_w_picpathcolorallocate($this->img, rand(0, 128), rand(0, 128), rand(0, 128)); $font = rand(3,5); $x = 3 + ($this->width/$this->num)*$i; $y = rand(1, 5); p_w_picpathstring($this->img, $font,$x, $y, $this->code{$i}, $color); } } //設置干擾元素 private function setDisturb(){ //加上點數 for($i=0;$i<100;$i++){ $color = p_w_picpathcolorallocate($this->img, rand(0, 255), rand(0, 255), rand(0, 255)); p_w_picpathsetpixel($this->img, rand(1, $this->width-2), rand(1, $this->heigth-2), $color); } //加上線條 for($i=0;$i<10;$i++){ $color = p_w_picpathcolorallocate($this->img, rand(0, 255), rand(0, 128), rand(0, 255)); p_w_picpatharc($this->img, rand(-10, $this->width+10), rand(-10, $this->heigth+10), rand(30, 300), rand(30, 300), 55, 44, $color); } } //輸出圖像 private function printImg(){ // header("Content-Type:p_w_picpath/jpeg"); // p_w_picpathjpeg($this->img); if(p_w_picpathtypes() & IMG_GIF){ header("Content-Type:p_w_picpath/gif"); p_w_picpathjpeg($this->img); }elseif(p_w_picpathtypes() & IMG_JPEG){ header("Content-Type:p_w_picpath/jpeg"); p_w_picpathjpeg($this->img); }elseif(p_w_picpathtypes() & IMG_JPG){ header("Content-Type:p_w_picpath/jpg"); p_w_picpathjpeg($this->img); }elseif(p_w_picpathtypes() & IMG_PNG){ header("Content-Type:p_w_picpath/png"); p_w_picpathjpeg($this->img); } } //生成驗證碼 private function createCode(){ $codes = "23456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ"; $code = ""; for($i=0;$i<$this->num;$i++){ $code .=$codes{rand(0,strlen($codes)-1)}; } return $code; } //釋放圖像資源 function __destruct(){ p_w_picpathdestroy($this->img); } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。