前端页面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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。