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函数(简单整理)
Apr 30 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
Jan 10 PHP
非常好用的Zend Framework分页类
Jun 25 PHP
php实现读取超大文件的方法
Jul 28 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
php命令行用法入门实例教程
Oct 27 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
PHP基于XMLWriter操作xml的方法分析
Jul 17 PHP
php实现基于pdo的事务处理方法示例
Jul 21 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
php中的explode()函数实例介绍
Jan 18 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
新浪SAE搭建PHP项目教程
2015/01/28 PHP
PHP实现链式操作的核心思想
2015/06/23 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
php获取图片信息的方法详解
2015/12/10 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
javascript下function声明一些小结
2007/12/28 Javascript
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
python多线程扫描端口示例
2014/01/16 Python
Python中方法链的使用方法
2016/02/23 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
如何将json数据转换为python数据
2020/09/04 Python
python从PDF中提取数据的示例
2020/10/30 Python
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
亲子活动总结
2014/04/26 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
HTML页面滚动时部分内容位置固定不滚动的实现
2021/04/14 HTML / CSS
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL