php学习笔记之小功能实现验证码类
2020-03-24 12:55
676 查看
创建一个验证码类
首先思考创建验证码的步骤:
- 创建文件夹名称为Vcode.class.php
- 创建成员变量
- 创建图像
- 设置图像边框颜色
- 设置像素点
- 设置干扰线
- 设置字体
- 释放资源
- 使用__toString()集成上面的方法(省去调用方法的步骤)
- 为了使功能更加专一,新建一个useVcode.php文件
- 制作form表单
- 判断用户传入的数据是否和设置的数据一致
一、创建成员变量
class Vcode { //成员方法 private $width;//设置验证码宽度 private $height;//设置验证码高度 private $image;//设置验证码对象 private $font;//设置字体 private $codeNum;//设置输出的字符数 }
二、成员方法
function __construct($width=100,$height=40,$codeNum=4)//构造方法,创建实例时自动调用,赋初值 { //开启session session_start(); //为了保存数据与用户输入的数据进行对比 $this->width=$width; $this->height=$height; $this->codeNum=$codeNum; }
三、绘制图像
private function getImage(){ //创建画布 $this->image=imagecreatetruecolor($this->width,$this->height); //填充画布颜色 $back=imagecolorallocate($this->image,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); //填充背景 imagefill($this->image,0,0,$back); //绘制边框背景颜色 $bordercolor=imagecolorallocate($this->image,255,0,0); //为背景设置边框颜色 imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$bordercolor); }
四、绘制像素点
private function setPixel(){ for ($i=0;$i<100;$i++){ //设置像素点颜色 $pixelcolor=imagecolorallocate($this->image,mt_rand(150,200),mt_rand(150,200),mt_rand(150,200)); //设置像素点 imagesetpixel($this->image,mt_rand(0,$this->width),mt_rand(0,$this->height),$pixelcolor); } }
五、设置干扰线
private function setLine(){ //设置线条颜色 for ($i=0;$i<=4;$i++){ $linecolor=imagecolorallocate($this->image,mt_rand(150,200),mt_rand(150,200),mt_rand(150,200)); imageline($this->image,mt_rand(0,$this->width/2-1),mt_rand(0,$this->height/2-1),mt_rand($this->width/2-1,$this->width),mt_rand($this->height/2-1,$this->height),$linecolor); } }
六、设置字符集
private function setChar(){ //传入字符串 $str='abcdefghigkLmaokqrstuvwxyz147258369'; //获取随机的四个字符 for ($i=0;$i<$this->codeNum;$i++){ $this->font.=$str{mt_rand(0,strlen($str)-1)}; } for ($i=0;$i<strlen($this->font);$i++){ $fontColor=imagecolorallocate($this->image,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120)); //设置字体左上角的Y点 $x=$this->width/$this->codeNum*$i+mt_rand(3,8); $y=mt_rand(10,$this->height/2); //写入字体 imagechar($this->image,mt_rand(3,5),$x,$y,$this->font{$i},$fontColor); } }
七、设置输出JPEG图像
private function outputImage(){ header('Content-type:image/jpeg'); imagejpeg($this->image); }
八、释放资源
function __destruct(){ imagedestroy($this->image); }
九、使用__toString()集成上面的方法(省去调用方法的步骤)
function __toString() //__toString方法不能使用private等关键词限制 { //创建图像 $this->getImage(); //创建像素点 $this->setPixel(); //创建干扰线 $this->setLine(); //输出字体 $this->setChar(); //输出图像 $this->outputImage(); //保存会话给浏览器 $_SESSION['code']=$this->font; return ''; //__toString()方法必须返回一个字符串类型 }
十、新建一个useVcode.php文件 ,实例化Vcode类
include_once './image.class.php'; //相对路径 echo new Vcode();
十一、 制作form表单
<form action="action.php" method="post"> 验证码:<input type="text" name="code"><img src="./userImage.php" onclick="this.src='./userImage.php'"/> <input type="submit" value="提交">
十二、 判断用户传入的数据是否和设置的数据一致
session_start(); var_dump($_SESSION['code']);//打印保存在code的数据 if (strtoupper($_POST['code'])==strtoupper($_SESSION['code'])){//strtoupper()方法将字符串转化为大写,因为是不区分大小写的 echo '验证成功'; }else{ echo '验证失败'; }
本人发表的所有文章仅为自己学习和复习使用,谢谢!
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- PHP学习笔记 2009-8-25 实现分页显示功能
- [学习笔记]小型论坛功能——实现树状结构的主题贴显示的类[2]
- coolite1.0 学习笔记(二) --Combobox 获得焦点自动展开 功能实现
- Android(java)学习笔记258:JNI之hello.c(c代码功能实现)指针语法解析
- ITCAST视频-Spring学习笔记(使用CGLIB实现AOP功能与AOP概念解释)
- 【黑马程序员】简单拍照功能的实现(学习笔记)之一
- php学习笔记--trait的使用(为实现多继承产生)
- php学习笔记:利用gd库生成图片,并实现随机验证码
- PHP学习笔记【21】--PHP实现文件下载
- Java菜鸟学习笔记--语法篇(一):用Math.random()实现验证码功能
- php学习笔记5--php自创功能函数的封装
- Andriod学习笔记:仿美图秀秀首页手柄下拉功能实现(二)
- (PHP学习笔记)实现页面静态化
- PHP学习笔记:通过curl实现采集网站内容
- 关于java打印功能的最简单实现的学习笔记
- php学习笔记 数组遍历实现代码
- 【PHP学习笔记】用户注册模块用户类以及验证码类
- jsp学习笔记2——分页功能实现
- PHP学习笔记【21】--PHP实现文件下载
- 研读asp.net排课功能实现学习笔记