PHP 绘制网站登录首页图片验证码


Posted in PHP onApril 12, 2016

几乎所有的网站登录页都会有验证码,验证码是一种安全保护机制,在注册时要求必须有人工操作进行验证,用于防止垃圾注册机大量注册用户账号占用服务器内存从而使服务器瘫痪。

图片验证码的实现十分简单。首先从指定字符集合中随机抽取固定数目的字符,以一种不规则的方法画在画布上,再适当添加一些干扰点和干扰元素,最后将图片输出,一张崭新的验证码就完成了。

先给大家展示下生成的验证码:

PHP 绘制网站登录首页图片验证码 

点击刷新:

PHP 绘制网站登录首页图片验证码 

如果大家对实现效果非常满意,请继续往下看。

前端代码如下:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>This is a test!</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
</head>
<body>
<form name="form">
<input type="text" placeholder="账号"/><br/>
<input type="password" placeholder="密码"/><br/>
<input type="text" placeholder="验证码"/>
<img id="verImg" src="libs/verification.php"/>
<a href="#" class="change" onclick="changeVer()">点击刷新</a><br/>
<input type="submit" value="登录"/>
</form>
<script type="text/javascript">
//刷新验证码
function changeVer(){
document.getElementById("verImg").src="libs/verification.php?tmp="+Math.random();
}
</script>
</body>
</html>

php脚本文件验证码的代码如下:

<?php
session_start();
//开启session记录验证码数据
vCode(4, 15);//设置验证码的字符个数和图片基础宽度
//vCode 字符数目,字体大小,图片宽度、高度
function vCode($num = 4, $size = 20, $width = 0, $height = 0) {
!$width && $width = $num * $size * 4 / 5 + 15;
!$height && $height = $size + 10;
//设置验证码字符集合
$str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW";
//保存获取的验证码
$code = '';
//随机选取字符
for ($i = 0; $i < $num; $i++) {
$code .= $str[mt_rand(0, strlen($str)-1)];
}
//创建验证码画布
$im = imagecreatetruecolor($width, $height);
//背景色
$back_color = imagecolorallocate($im, mt_rand(0,100),mt_rand(0,100), mt_rand(0,100));
//文本色
$text_color = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand(100, 255));
imagefilledrectangle($im, 0, 0, $width, $height, $back_color);
// 画干扰线
for($i = 0;$i < 5;$i++) {
$font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagearc($im, mt_rand(- $width, $width), mt_rand(- $height, $height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color);
}
// 画干扰点
for($i = 0;$i < 50;$i++) {
$font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $font_color);
}
//随机旋转角度数组
$array=array(5,4,3,2,1,0,-1,-2,-3,-4,-5);
// 输出验证码
// imagefttext(image, size, angle, x, y, color, fontfile, text)
@imagefttext($im, $size , array_rand($array), 12, $size + 6, $text_color, 'c:\WINDOWS\Fonts\simsun.ttc', $code);
$_SESSION["VerifyCode"]=$code;
//no-cache在每次请求时都会访问服务器
//max-age在请求1s后再次请求会再次访问服务器,must-revalidate则第一发送请求会访问服务器,之后不会再访问服务器
// header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate");
header("Cache-Control: no-cache");
header("Content-type: image/png;charset=gb2312");
//将图片转化为png格式
imagepng($im);
imagedestroy($im);
}
?>

好了,关于小编给大家介绍的php绘制图片验证就给大家介绍这么多,希望对大家有所帮助!

PHP 相关文章推荐
开发大型 PHP 项目的方法
Jan 02 PHP
PHP获取网卡地址的代码
Apr 09 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
浅析PHP绘图技术
Jul 03 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
php mysql获取表字段名称和字段信息的三种方法
Nov 13 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
PHP中关键字interface和implements详解
Jun 14 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
PHP中Restful api 错误提示返回值实现思路
Apr 12 #PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 #PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 #PHP
PHP实现的浏览器检查类
Apr 11 #PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
Apr 11 #PHP
PHP模板引擎Smarty内建函数详解
Apr 11 #PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 #PHP
You might like
10条PHP编程习惯助你找工作
2008/09/29 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
详解PHP中的状态模式编程
2015/08/11 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
js同源策略详解
2015/05/21 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
jQuery中的Deferred和promise 的区别
2016/04/03 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
值得分享的Bootstrap Table使用教程
2016/11/23 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
python归并排序算法过程实例讲解
2020/11/04 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
测试驱动开发的主要步骤是什么
2014/12/10 面试题
银行财务部实习生的自我鉴定
2013/11/27 职场文书
恶搞卫生巾广告词
2014/03/18 职场文书
《欢乐的泼水节》教学反思
2014/04/22 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
庆祝教师节主持词
2015/07/06 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
古诗之感恩老师
2019/10/24 职场文书