//1.创建画布
$canvas=imagecreatetruecolor(100,30);
//2.创建背景颜色
$bg_color=imagecolorallocate($canvas, 0xCC, 0xCC, 0xCC);
//3.填充颜色(注意:上面的第二步只是创建对应的颜色,第一个参数放画布是因为,画布分为rgb和真彩,所对应的rgb值有所不同)
imagefill($canvas, 0, 0, $bg_color);
//4.生成验证码的字符
$charCode="ZXCVBNMASDFGHJKLQWERTYUIOP23456789zxcvbnmkjhgfdsaqwertyuip";
$charCode_len=strlen($charCode)-1;
$code="";//最终生成的验证码
for($i=0;$index=4,$i<$index;$i++){
$code.=$charCode[mt_rand(0, $charCode_len)];
}
//将code发布到session上用于页面核对验证码
session_start();
$_SESSION['vCode']=$code;
or($i=0;$index=4,$i<$index;$i++){
//随机创建一个真彩色,用于添加到字体颜色
$fontColor=imagecolorallocate($canvas, mt_rand(0, 100), mt_rand(0, 50), mt_rand(0, 50));
//设置字体的其他属性
imagettftext($canvas,//作用的背景图
16,//字体大小
mt_rand(0, 45),//字体的倾斜角度
16*$i+15,mt_rand(20, 30),//字体再x、y轴上的浮动范围
$fontColor,
'D:\php\http\Apache24\htdocs\Task345\fonts\SourceCodePro-Bold.ttf',
$code[$i]);
}
/设置干扰元素 小点点
for($i=0;$index=300,$i<$index;$i++){
$dotColor=imagecolorallocate($canvas, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagesetpixel($canvas, mt_rand(0, 100), mt_rand(0, 30), $dotColor);
}
//设置干扰元素 线
for($i=0;$index=12,$i<$index;$i++){
$lineColor=imagecolorallocate($canvas, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imageline($canvas, mt_rand(0, 100), mt_rand(0, 30), mt_rand(0, 100), mt_rand(0, 30), $lineColor);
}
//设置verifyCode.php文件的响应头类型,用于再html页面上引用验证码图
header('Content-Type:image/gif');
//生成gif图
imagegif($canvas);
//调用只需要将php文档放到图片链接里即可,需注意路径
<img src="./verifyCode.php" />
另外,在实际操作中需要核对验证码时,只需要利用$_SESSION来获取对应的数据
对应上例:
session_start();
//获取用户填的验证码
$userVCode=isset($_POST['captcha'])?trim($_POST['captcha']):'';
//判断验证码是否存在
if(empty($_SESSION['vCode'])){
exit("验证码以过期");
}
//核对验证码
$vcode=$_SESSION['vCode'];
unset($_SESSION['vCode']);//使用过后删除验证码
if(strtolower($userVCode)!==strtolower($vcode)){//函数strtolower()将所有字母转换成小写,变相不用区分大小写
exit('验证码输入错误');
}