php生成验证码
唐长老网络 PHP 718阅读
php生成验证码
class VeriCode { // 获取验证码配置 private static function _getCodeConfig() { return [ // 验证码字符集 'codeStr' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', // 验证码个数 'codeCount' => 4, // 字体大小 'fontsize' => 50, // 验证码的宽度 'width' => 70, // 验证码高度 'height' => 26, // 是否有干扰点?true有,false没有 'disturbPoint' => false, // 干扰点个数,disturbPoint开启后生效 'pointCount' => 1, // 是否有干扰条?true有,false没有 'disturbLine' => false, // 干扰条个数,disturbLine开启后生效 'lineCount' => 9 ]; } // 创建图片验证码 public static function create() { // 配置 $config = self::_getCodeConfig(); //创建画布 $image = imagecreatetruecolor($config['width'], $config['height']); //背景颜色 $bgcolor = imagecolorallocate($image, 33, 37, 41); imagefill($image, 0, 0, $bgcolor); $captch_code = '';//存储验证码 $captchCodeArr = str_split($config['codeStr']); //随机选取4个候选字符 for ($i = 0; $i < $config['codeCount']; $i++) { $fontsize = $config['fontsize']; $fontcolor = imagecolorallocate($image, rand(20, 255), rand(20, 255), rand(20, 255));//随机颜色 $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); // 水平地画一行字符串 // imagestring($image, $fontsize, 0, $textX, $textY, $textColor, $fontFile, $code); } 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, 29), $pointcolor); } } //增加干扰线 if ($config['disturbLine']) { for ($i = 0; $i < $config['lineCount']; $i++) { $linecolor = imagecolorallocate($image, rand(80, 200), rand(80, 200), rand(80, 200)); imageline($image, rand(1, 99), rand(1, 29), rand(1, 99), rand(1, 29), $linecolor); } } //输出格式 header('content-type:image/png'); imagepng($image); //销毁图片 imagedestroy($image); } }
调用方法:
$code = new VeriCode; return $code->create();
标签: