验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、注册、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试
封装验证码类
(1)封装一个验证码类,先实现能够随机生成不同颜色的背景
(2)在生成的图片上面随机的产生文字(字母、数字)
<由于随机生成字符的代码肯定会很多,所以我们将生成字符的代码封装到函数中
(3)把随机生成的字符写入到画布中
使用imagettftext()写入,因为可以指定字体文件
<如何实现让每个字符所在的位置不一样,倾斜的角度也不一样?
思路:遍历这4个字符,指定每一个字符的位置、倾斜的角度
//开始绘制验证码
public function makeImage()
{
//1. 创建画布,背景颜色应该是随机产生的,尽量背景颜色浅一点
$image = imagecreatetruecolor($this->width, $this->height);
//2. 分配颜色
$color = imagecolorallocate($image, mt_rand(100,255),
mt_rand(100,255), mt_rand(100,255));
imagefill($image, 0, 0, $color);
//3. 开始绘制文字
$code = $this->makeCode();
for($i=0;$ifont_size, mt_rand(-30,30),
($this->width/$this->number)*$i+5, 20, mt_rand(0,100),
$this->font_file, $code[$i]);
}
//绘制100个干扰像素点
for($i=0;$i<100;$i++){
imagesetpixel($image, mt_rand(0,$this->width),
mt_rand(0,$this->height),
mt_rand(0,100));
}
//练习:绘制10条干扰线条
//3. 输出到浏览器
header("Content-Type:image/png");
imagepng($image);
//4. 销毁图像资源
imagedestroy($image);
}
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/9910.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除