official_website/app/common/util/VeriCode.php

80 lines
2.6 KiB
PHP
Raw Normal View History

2024-12-02 13:57:08 +08:00
<?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);
}
}