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的控制语句
Oct 09 PHP
PHP页面间传递参数实例代码
Jun 05 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
PHP中的类型约束介绍
May 11 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 PHP
php实现的简单中文验证码功能示例
Jan 03 PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 PHP
PHP实现提高SESSION响应速度的几种方法详解
Aug 09 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
PHP 字符串 小常识
2009/06/05 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
jquery radio 操作代码
2011/03/16 Javascript
JS定时器实例
2013/04/17 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
2019/04/10 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python中的urllib模块使用详解
2015/07/07 Python
python得到电脑的开机时间方法
2018/10/15 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
使用Python将图片转正方形的两种方法实例代码详解
2020/04/29 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
python实现邮件循环自动发件功能
2020/09/11 Python
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
造型师求职自荐信
2013/09/27 职场文书
市场策划求职信
2014/08/07 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书