>[success] ### 第四难 VerificationCode验证码
* 验证码可以防止机器人的恶意请求(恶意表单提交、破解密码、刷票、论坛灌水......)
* 案例链接:https://pan.baidu.com/s/1kVcOTuv 密码:d6j9
![](https://box.kancloud.cn/98570d04717f59331b20808fd201df5f_475x153.png)
>[success] ### 例子2
* 字体文件下载msjh.ttf 链接:https://pan.baidu.com/s/1jHLpYku 密码:el2k
~~~php
<?php
class VerificationCode
{
private $charset = "abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789"; //随机因子
public $code; //验证码
private $codelen = 4; //验证码长度
private $width = 130; //宽度
private $height = 50; //高度
private $img; //图像资源句柄
private $font; //制定字体
private $fontSize = 20; //字体大小
private $fontColor; //字体颜色
public function __construct()
{
//制定字体
$this->font = 'msjh.ttf';//注意字体路径要写对,否则显示不了图片
}
//生成验证码
private function createCode()
{
$len = strlen($this->charset) - 1;
for ($i = 0; $i < $this->codelen; $i++) {
$this->code .= $this->charset[mt_rand(0, $len)];
}
}
//生成背景
private function createBg()
{
$this->img = imagecreatetruecolor($this->width, $this->height);
//imagecreatetruecolor — 新建一个真彩色图像
$color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
//imagecolorallocate — 为一幅图像分配颜色
imagefilledrectangle($this->img, 0, $this->height, $this->width, 0, $color);
}
//生成文字
private function createFont()
{
//每个字符的平均宽度
$x = $this->width / $this->codelen;
for ($i = 0; $i < $this->codelen; $i++) {
//字体的颜色
$this->fontColor = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
imagettftext($this->img, $this->fontSize, mt_rand(-10, 10), $i * $x + mt_rand(1, 3), $this->height / 1.3, $this->fontColor, $this->font, $this->code[$i]);
//imagestring($this->img,5,$i*$x+mt_rand(1,5),5,$this->code[$i],$this->fontColor);
}
}
//生成线条、雪花
private function createDisturb()
{
for ($i = 0; $i < 6; $i++) {
$color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->width), mt_rand(0, $this->width), mt_rand(0, $this->width), $color);
//imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。
}
for ($i = 0; $i < 100; $i++) {
$color = imagecolorallocate($this->img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color);
//imagestring — 水平地画一行字符串
}
}
//输出
private function outPut()
{
header("Content-Type:image/png");
imagepng($this->img);
imagedestroy($this->img);
}
//显示验证码
public function showCode()
{
$this->createBg();
echo $this->code;
$this->createCode();
//$_SESSION['code'] = $this->getCode();
$this->createDisturb();
$this->createFont();
$this->outPut();
}
//获取验证码
public function getCode()
{
return strtolower($this->code);
}
}
$code = new VerificationCode();
$code->showCode();
~~~
![](https://box.kancloud.cn/b193e6c8c13cb5688764bd0249c0159e_460x195.png)
- 西天取经(九九八十一难)
- 第一难 WebUpload文件上传
- 第二难 UEditor文本编辑器
- 第三难 ThinkPHP自定义分页模板
- 第四难 VerificationCode验证码
- 第五难 递归 尾递归 迭代 回调
- 第六难 GRPC服务端和客户端
- 第七难 PHP小笔记
- 第八难 yum安装Apache PHP MySQL
- 第九难 高性能MySQL简介
- 第十难 DIV+CSS简介
- 十一难 留言板
- 十二难 正则表达式
- 十三难 PHPMailer邮件发送
- 十四难 日历
- 十五难 百度地图
- 十六难 加密
- 十七难 筛选url跳转
- 十八难 图片转ASCII码图
- 十九难 环境配置
- 二十难 开发工具LiteIDE
- 二一难 开发工具2
- 二二难 准备工作
- 二三难 第一个应用程序 Hello World
- 二四难 语法结构
- 二五难 命名规则
- 二六难 变量
- 二七难 常量
- 二八难 常量计数器 iota
- 二九难 判断语句if
- 三十难 择语句switch
- 三一难 循环语句 for
- 三二难 遍历 range
- 三三难 跳转语句goto, break, continue
- 三四难 make, len, cap, new, nil
- 三五难 数组 array
- 三六难 切片 slice
- 三七难 集合 map
- 三八难 通道 channel
- 三九难 函数 function
- 四十难 结构 struct
- 四一难 方法 method
- 四二难 接口 interface
- 四三难 指针
- 四四难 异常
- 四五难 模板应用
- 四六难 Go安装GRPC服务端和客户端
- 四七难 安装虚拟机软件(VirtualBox)
- 四八难 安装Centos7
- 四九难 --help
- 五十难 目录文件
- 五一难 系统磁盘
- 五二难 Shell
- 五三难 Nginx安装配置
- 五四难 PHP安装配置
- 五五难 MySQL安装配置
- 五六难 yum 安装 Apache PHP MySQL
- 五七难 安装gRPC
- 五八难 安装memcache
- 五九难 介绍
- 六十难 DIV + CSS
- 六一难 浏览器兼容问题
- 六二难 书写风格(Js中写Html)
- 六三难 NodeJs(Express框架pug模板引擎)
- 六四难 SQL优化工具SQLAdvisor
- 六五难 JpGraph图表
- 六六难 日期排序
- 六七难 大部分问题解决方法
- 六八难 小趣味
- 六九难 编程语言排行榜
- 七十难 PHP编辑器
- 七一难 Key
- 七二难 手动定位和自动定位当前文件位置
- 七三难 关闭代码提示
- 七四难 配置XDebug
- 七五难 配置FTP
- 七六难 配置SSH
- 七七难 Notepad++
- 七八难 XShell 和 Xftp
- 七九难 PHPExcel导入导出
- 八十难 编程科普
- 八一难 ThinkPHP5.1新特性: 容器
- 大雷音寺(领取经书)