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生成图形验证码几种方法小结
Aug 15 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
php超快高效率统计大文件行数
Jul 05 PHP
php封装的mysqli类完整实例
Oct 18 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
Aug 18 PHP
PHP实现基于3DES算法加密解密字符串示例
Aug 24 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
Laravel中10个有用的用法小结
May 06 PHP
php中isset与empty函数的困惑与用法分析
Jul 05 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
Jul 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
PHP文本操作类
2006/11/25 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
分享php邮件管理器源码
2016/01/06 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
JavaScript 继承的实现
2009/07/09 Javascript
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
2016/10/13 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
解决Python出现_warn_unsafe_extraction问题的方法
2016/03/24 Python
Python实现购物车购物小程序
2018/04/18 Python
在python中按照特定顺序访问字典的方法详解
2018/12/14 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
详解DeBug Python神级工具PySnooper
2019/07/03 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
使用K.function()调试keras操作
2020/06/17 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
华为C++笔试题
2014/08/05 面试题
Android面试题附答案
2014/12/08 面试题
班组长岗位职责范本
2014/01/05 职场文书
大学生演讲稿范文
2014/01/11 职场文书
业务员自荐信范文
2014/04/20 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL