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生成自己的LOG文件
Oct 09 PHP
php&amp;java(三)
Oct 09 PHP
分享PHP入门的学习方法
Jan 02 PHP
php木马webshell扫描器代码
Jan 25 PHP
linux命令之调试工具strace的深入分析
Jun 03 PHP
Laravel框架中扩展函数、扩展自定义类的方法
Sep 04 PHP
php中preg_match的isU代表什么意思
Oct 01 PHP
功能强大的php文件上传类
Aug 29 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
PHP __call()方法实现委托示例
May 20 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
利用static实现表格的颜色隔行显示
2006/10/09 PHP
php一些公用函数的集合
2008/03/27 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
PHP 判断常量,变量和函数是否存在
2009/04/26 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
python实现连续图文识别
2018/12/18 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
python Tornado框架的使用示例
2020/10/19 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
消防安全检查制度
2014/02/04 职场文书
cf战队收人广告词
2014/03/14 职场文书
网站创业计划书
2014/04/30 职场文书
环保倡议书怎么写
2014/05/16 职场文书
男方婚礼答谢词
2015/01/20 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
Redis如何实现分布式锁
2021/08/23 Redis
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技