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中使用Oracle数据库(4)
Oct 09 PHP
一些常用的php函数
Dec 06 PHP
Php中文件下载功能实现超详细流程分析
Jun 13 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
PHP函数rtrim()使用中的怪异现象分析
Feb 24 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
php创建类并调用的实例方法
Sep 25 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
Oct 09 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 ajax 分页类代码
2008/11/13 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
2011/10/31 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
jQuery中的each()详细介绍(推荐)
2016/05/25 Javascript
Three.js基础部分学习
2017/01/08 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
python把1变成01的步骤总结
2019/02/27 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
2019/07/02 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
简单的JAVA编程面试题
2013/03/19 面试题
公司市场部岗位职责
2013/12/02 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
开学典礼致辞
2015/07/29 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers