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 相关文章推荐
基于Windows下Apache PHP5.3.1安装教程
Jan 08 PHP
基于pear auth实现登录验证
Feb 26 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
PHP文件读写操作之文件写入代码
Jan 13 PHP
使用php显示搜索引擎来的关键词
Feb 13 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
PHP闭包函数详解
Feb 13 PHP
java微信开发之上传下载多媒体文件
Jun 24 PHP
PHP批量删除jQuery操作
Jul 23 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
Feb 06 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 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
在html文件中也可以执行php语句的方法
2015/04/09 PHP
php json相关函数用法示例
2017/03/28 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
简介JavaScript中toUpperCase()方法的使用
2015/06/06 Javascript
jquery实现图片预加载
2015/12/25 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
python中shell执行知识点
2020/05/06 Python
Django静态文件加载失败解决方案
2020/08/26 Python
Django websocket原理及功能实现代码
2020/11/14 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
办理生育手续介绍信
2014/01/14 职场文书
幼儿园教师个人反思
2014/01/30 职场文书
文明礼仪标语
2014/06/13 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
县委务虚会发言材料
2014/10/20 职场文书
委托书格式要求
2015/01/28 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python