80 lines
2.6 KiB
PHP
80 lines
2.6 KiB
PHP
|
<?php
|
|||
|
|
|||
|
namespace app\common\util;
|
|||
|
|
|||
|
class VeriCode
|
|||
|
{
|
|||
|
private static function _getCodeConfig(){
|
|||
|
return[
|
|||
|
// '验证码字符集'
|
|||
|
'codeStr' =>'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890',
|
|||
|
//验证码格式
|
|||
|
'codeCount'=>4,
|
|||
|
//字体大小
|
|||
|
'fontsize'=>16,
|
|||
|
//验证码宽度
|
|||
|
'width'=>100,
|
|||
|
//验证码高度
|
|||
|
'height'=>36,
|
|||
|
//是否有干扰点?true有,false没有
|
|||
|
'disturbPoint'=>true,
|
|||
|
//干扰点格式disturbPoint开启后生效
|
|||
|
'pointCount'=>200,
|
|||
|
//是否有干扰条?true有,false没有
|
|||
|
'disturbLine'=>ture,
|
|||
|
//干扰条个数,disturbLine开启后生效
|
|||
|
'lineCount'=>3
|
|||
|
];
|
|||
|
}
|
|||
|
|
|||
|
public static function create(){
|
|||
|
//配置
|
|||
|
$config = self::_getCodeConfig();
|
|||
|
|
|||
|
//创建花呗
|
|||
|
$image= imagecreatetruecolor($config['width'], $config['height']);
|
|||
|
//背景颜色
|
|||
|
$bgcolor=imagecolorallocate($image, 255,255,255);
|
|||
|
imagefill($image, 0, 0, $bgcolor);
|
|||
|
$captch_code = '';
|
|||
|
$captchCodeArr = str_split($config['codeStr']);
|
|||
|
|
|||
|
//随机获取n个候选字符
|
|||
|
for($i=0; $i<$config['codeCount']; $i++){
|
|||
|
$fontSize = $config['fontSize'];
|
|||
|
$fontColor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
|
|||
|
$fontContent = $captchCodeArr[rand(0, strlen($config['codeStr']) - 1)];
|
|||
|
$captch_code .= $fontContent;
|
|||
|
$_x = $config['width']/$config['codeCount'];
|
|||
|
$x = ($i*(int)$_x) + rand(5, 10);//随机坐标
|
|||
|
$y = rand(5, 10);
|
|||
|
imagestring($image, $fontSize, $x, $y, $fontContent, $fontColor);
|
|||
|
}
|
|||
|
session_start();
|
|||
|
$_SESSION['code'] = $captch_code;
|
|||
|
|
|||
|
//增加干扰点
|
|||
|
if($config['disturbPoint']){
|
|||
|
for ($i=0; $i<$config['pointCount']; $i++){
|
|||
|
$pointColor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
|
|||
|
imagesetpixel($image, rand(1, 99), rand(1, 99), $pointColor);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//增加干扰线
|
|||
|
if ($config['disturbLine']){
|
|||
|
for ($i=0; $i<$config['lineCount']; $i++){
|
|||
|
$lineColor = imagecolorallocate($image, rand(80, 280), rand(80, 220), rand(80, 220));
|
|||
|
imageline($image, rand(1, 99), rand(1, 99), rand(1, 99),rand(1, 99), $lineColor);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//输出格式
|
|||
|
header('content-type:image/png');
|
|||
|
imagepng($image);
|
|||
|
|
|||
|
//销毁图片
|
|||
|
imagedestroy($image);
|
|||
|
}
|
|||
|
|
|||
|
}
|