public function yzm(){
// 创建验证码
$w = 120;
$h = 50;
// 1.创建画布
$im = imagecreatetruecolor($w, $h);
// 2.绘制颜色
$white = imagecolorallocate($im, 255, 255, 255);
$rand_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
// 3.填充背景 默认是黑色
imagefill($im, 0, 0, $white);
// 4.绘制验证码
putenv('GDFONTPATH=' . realpath('.'));
$font = './simsun.ttc';//字体文件
$x = 11;
$word = "";
for ($i = 0; $i < 4; $i++) {
$f = 30;
$rand_num = mt_rand(0, 9);
$word .= $rand_num;
$rand_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagettftext($im, 20, mt_rand(-20, 20), $f * $i + $x, 30, $rand_color, $font, $rand_num);
}
// 把验证码存入session
Session::put('yzm',$word);
// 5.页面输出
header("content-type:image/png");
imagepng($im);
//销毁图片
imagedestroy($im);
}
<?php
function yzm($type=1,$length=1){
switch ($type){
case 1://数字
$arr = str_shuffle(implode(range(0,9)));
return substr($arr,0,$length);
case 2://数字+字母
$arr = array_merge(range(0,9),range('a','z'),range('A','Z'));
$arr = str_shuffle(implode($arr));
return substr($arr,0,$length);
case 3://字母
$arr = array_merge(range('a','z'),range('A','Z'));
$arr = str_shuffle(implode($arr));
return substr($arr,0,$length);
}
}
$brr= yzm(3,4);
return $brr;
class Code
{
// 验证码个数$number
protected $number;
// 验证码类型$codeType
protected $codeType;
// 验证码图像宽度$width
protected $width;
// 验证码$height
protected $height;
// 验证码字符串$code
protected $code;
// 图像资源$image
protected $image;
public function __construct($number = 4, $codeType = 0, $height = 50, $width = 100)
{
//初始化自己的成员属性
$this->number = $number;
$this->codeType = $codeType;
$this->width = $width;
$this->height = $height;
//生成验证码函数
$this->code = $this->createCode();
}
public function __get($name)
{
if ($name == 'code') {
return $this->code;
}
return false;
}
/*获取验证码*/
public function getCode()
{
return $this->code;
}
/*图像资源销毁*/
public function __destruct()
{
imagedestroy($this->image);
}
protected function createCode()
{
//通过你的验证码类型生成验证码
switch ($this->codeType) {
case 0: //纯数字
$code = $this->getNumberCode();
break;
case 1: //纯字母的
$code = $this->getCharCode();
break;
case 2: //数字和字母混合
$code = $this->getNumCharCode();
break;
default:
die('不支持此类验证码类型');
}
return $code;
}
protected function getNumberCode()
{
$str = join('', range(0, 9));
return substr(str_shuffle($str), 0, $this->number);
}
protected function getCharCode()
{
$str = join('', range('a', 'z'));
$str = $str . strtoupper($str);
return substr(str_shuffle($str), 0, $this->number);
}
protected function getNumCharCode()
{
$numstr = join('', range(0, 9));
$str = join('', range('a', 'z'));
$str = $numstr . $str . strtoupper($str);
return substr(str_shuffle($str), 0, $this->number);
}
protected function createImage()
{
$this->image = imagecreatetruecolor($this->width,
$this->height);
}
protected function fillBack()
{
imagefill($this->image, 0, 0, $this->lightColor());
}
/*浅色*/
protected function lightColor()
{
return imagecolorallocate($this->image, mt_rand(133, 255), mt_rand(133, 255), mt_rand(133, 255));
}
/*深色*/
protected function darkColor()
{
return imagecolorallocate($this->image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
}
protected function drawChar()
{
$width = ceil($this->width / $this->number);
for ($i = 0; $i < $this->number; $i++) {
$x = mt_rand($i * $width + 5, ($i + 1) * $width - 10);
$y = mt_rand(0, $this->height - 15);
imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());
}
}
protected function drawLine()
{
for ($i = 0; $i < 5; $i++) {
imageline($this->image, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $this->darkColor());
}
}
protected function drawDisturb()
{
for ($i = 0; $i < 150; $i++) {
$x = mt_rand(0, $this->width);
$y = mt_rand(0, $this->height);
imagesetpixel($this->image, $x, $y, $this->lightColor());
}
}
protected function show()
{
header('Content-Type:image/png');
imagepng($this->image);
}
public function outImage()
{
// 创建画布
$this->createImage();
// 填充背景色
$this->fillBack();
// 将验证码字符串花到画布上
$this->drawChar();
// 添加干扰元素
$this->drawDisturb();
// 添加线条
$this->drawLine();
// 输出并显示
$this->show();
}
}