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 相关文章推荐
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
php 强制下载文件实现代码
Oct 28 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
php的PDO事务处理机制实例分析
Feb 16 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
详解php 使用Callable Closure强制指定回调类型
Oct 26 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP rmdir()函数的用法总结
Jul 02 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 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 escape URL编码
2008/12/10 PHP
PHP文件读写操作之文件读取方法详解
2011/01/13 PHP
php中删除、清空session的方式总结
2015/10/09 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
使用PHP开发留言板功能
2019/11/19 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
jQuery实现的左右移动焦点图效果
2016/01/14 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
JS中Map和ForEach的区别
2018/02/05 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
为什么JavaScript中0.1 + 0.2 != 0.3
2020/12/03 Javascript
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
人机交互程序 python实现人机对话
2017/11/14 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
python实现的自动发送消息功能详解
2019/08/15 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
python算的上脚本语言吗
2020/06/22 Python
pandas实现导出数据的四种方式
2020/12/13 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
军训心得体会
2013/12/31 职场文书
优秀少先队工作者事迹材料
2014/05/13 职场文书
小学安全工作总结2015
2015/05/18 职场文书
教师岗位说明书
2015/09/30 职场文书
5行Python代码实现一键批量扣图
2021/06/29 Python
Python正则表达式中flags参数的实例详解
2022/04/01 Python