PHP 生成验证码【很简单三步就搞定】
什么是验证码?
是一种区分用户是计算机还是人的公共全自动程序,主要防止非法软件进行破坏
实现思路:
好比你在用电脑画画,你要先有画纸才能进行绘画
第一步:
设置画布大小和颜色
第二步:
绘制干扰元素和验证码信息
第三部:
在浏览器中加载画布
常用函数:
imagecreatetruecolor — 新建一个真彩色图像画布
imagecolorallocate — 为一幅图像分配颜色
imagefill — 画布填充
imagesetpixel — 画一个单点像素
imageline — 画一条线段
imagettftext — 用 TrueType 字体向图像写入文本 [将验证码字符写入画布中]
header(‘Content-type: image/jpeg’); 浏览器加载类型
imagejpeg — 输出图象到浏览器或文件。
array_merge — 合并一个或多个数组
count — 计算数组中的单元数目或对象中的属性个数
rand — 产生一个随机整数
range — 建立一个包含指定范围单元的数组
代码实现 :
//============== 设置画布大小和颜色=========
$width = 200;
$height = 50;
$image = imagecreatetruecolor($width,$height); // 设置画布的大小
$bjColor = imagecolorallocate($image,255,222,173); // 设置画布背景色
imagefill($image,0,0,$bjColor); // 填充画布
// ============设置干扰元素=============
// 设置点干扰元素
for($a = 0;$a <100;$a++){
$spotColor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255)); // 设置点元素颜色
imagesetpixel($image,rand(0,$width),rand(0,$height),$spotColor); // 绘制点元素
}
// 设置线干扰元素
for($a = 0;$a < 20;$a++){
$lineColor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255)); // 设置线元素颜色
imageline($image,rand(0,$width),rand(0,$height),rand(0,$width),rand(0,$height),$lineColor); // 绘制线元素
}
// 设置验证码信息
$coder = '';
$coderCount = 4; // 验证码字符个数
$coderAll = array_merge(range(2,9),range('a','z'),range('A','Z')); // 生成验证字符码信息库
$key = count($coderAll)-1; // 统计共有多少元素信息
for($a=0;$a<$coderCount;$a++){
$coder .=$coderAll[rand(0,$key)]; // 随机选取$coderCount 个 字符
}
for($a=0;$a<$coderCount;$a++){
$textColor = imagecolorallocate($image,rand(10,50),rand(10,60),rand(10,60)); // 设置验证码字符颜色
imagettftext( // 绘制验证码字符
$image, // 绘制位置
20, // 字体大小
rand(10,-10), // X 轴偏移角度
30+40*$a, // 设置字符间隔
rand(25,25), // Y 轴字体偏移角度
$textColor, // 字体颜色
__DIR__.'/./font/captcha.ttf', // 字体样式【要下载下来引用即可】
$coder[$a] // 验证码字符
);
}
// =============生成验证码到浏览器===========
header('Content-type: image/jpeg'); // 浏览器传送格式
imagejpeg($image); // 输出到浏览器
只是基础知识,望大家多多指教。