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 相关文章推荐
第1次亲密接触PHP5(1)
Oct 09 PHP
Smarty foreach控制循环次数的实现详解
Jul 03 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
PHP APC缓存配置、使用详解
Mar 06 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
PHP中explode函数和split函数的区别小结
Aug 24 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
Aug 28 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 PHP
用php实现分页效果的示例代码
Dec 10 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
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
解析thinkphp的左右值无限分类
2013/06/20 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
PHP合并静态文件详解
2014/11/14 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
获取body标签的两种方法
2011/10/13 Javascript
JS判断文本框内容改变事件的简单实例
2014/03/07 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
介绍Python的Django框架中的QuerySets
2015/04/20 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
Python使用爬虫爬取静态网页图片的方法详解
2018/06/05 Python
python变量赋值方法(可变与不可变)
2019/01/12 Python
ipython和python区别详解
2019/06/26 Python
python查找重复图片并删除(图片去重)
2019/07/16 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
如何利用python发送邮件
2020/09/26 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
编程实现去掉XML的重复结点
2014/05/28 面试题
一分钟演讲稿
2014/04/30 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL