<?php
/**
*这是一个验证码的logic
*/
namespace Wechat\Logic;
class ValidateCodeLogic extends CommonLogic {
private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';//随机因子
private $code;//验证码
private $codelen = 4;//验证码长度
private $width = 130;//宽度
private $height = 50;//高度
private $img;//图形资源句柄
private $font;//指定的字体
private $fontsize = 20;//指定字体大小
private $fontcolor;//指定字体颜色
public function __construct() {
$this->font = dirname(__FILE__).'\font\elephant.ttf';//注意字体路径要写对,否则显示不了图片
}
//生成随机码
public function createCode() {
$_len = strlen($this->charset)-1;
for ($i=0;$i<$this->codelen;$i++) {
$this->code .= $this->charset[mt_rand(0,$_len)];
}
// dump('1'.);
}
//生成背景
public function createBg() {
$this->img = imagecreatetruecolor($this->width, $this->height);
$color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
}
//生成文字
public 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(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);
//dump( imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]));
}
}
//生成线条、雪花
public function createLine() {
//线条
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->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
}
//雪花
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);
}
}
//输出
public function outPut() {
header('Content-type:image/png');
imagepng($this->img);
imagedestroy($this->img);
}
//对外生成
public function doimg() {
$this->createBg();
$this->createCode();
$this->createLine();
$this->createFont();
$this->outPut();
}
//获取验证码
public function getCode() {
return strtolower($this->code);
}
}
然后我们要在控制器里引用这个
public function createcode(){
$ValidateCodeLogic = D('ValidateCode','Logic');
$ValidateCodeLogic -> doimg();
$code = $ValidateCodeLogic -> getCode();
session('code',$code);
}
这样我们可以得到这个随机码 并且把它存在一个session里
最后 我们要让这个验证码显示到页面上
<img title="点击刷新" src="{:U('Book/createcode')}" align="absbottom"></img>
当然 我们可以加上一个js 让我们可以点击这个验证码时可以切换它 于是变成了这样
<img title="点击刷新" src="{:U('Book/createcode')}" align="absbottom" onclick="this.src='{:U('Book/createcode')}'+Math.random();"></img>
字体分享:
https://yunpan.cn/cui4KZdcusXUr (提取码:bb89)