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 相关文章推荐
杏林同学录(五)
Oct 09 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
服务器变量 $_SERVER 的深入解析
Jul 02 PHP
在PHP上显示JFreechart画的统计图方法
Nov 03 PHP
php实现分页工具类分享
Jan 09 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 21 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(3)
2006/10/09 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
php自动载入类用法实例分析
2016/06/24 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
JQuery优缺点分析说明
2011/04/10 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python中datetime常用时间处理方法
2015/06/15 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
使用python为mysql实现restful接口
2018/01/05 Python
python操作oracle的完整教程分享
2018/01/30 Python
django允许外部访问的实例讲解
2018/05/14 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
十佳青年个人事迹材料
2014/01/28 职场文书
厕所文明标语
2014/06/11 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书