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 程序员的调试技术小结
Nov 15 PHP
通俗易懂的php防注入代码
Apr 07 PHP
smarty基础之拼接字符串的详解
Jun 18 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
php通过strpos查找字符串出现位置的方法
Mar 17 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
PHP魔术方法之__call与__callStatic使用方法
Jul 23 PHP
php 中self,this的区别和操作方法实例分析
Nov 04 PHP
PHP的imageTtfText()函数深入详解
Mar 03 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数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
php获取访问者浏览页面的浏览器类型
2017/01/23 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
mongodb和php的用法详解
2019/03/25 PHP
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
Javascript window对象详解
2014/11/12 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
解决select2在bootstrap modal中不能正常使用的问题
2018/08/09 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
vue项目中使用多选框的实例代码
2020/07/22 Javascript
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
介绍Python的@property装饰器的用法
2015/04/28 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
实习单位接收函模板
2014/01/10 职场文书
检察官就职演讲稿
2014/01/13 职场文书
初三学生个人自我评定
2014/04/06 职场文书
园艺师求职信
2014/04/27 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
python基础之while循环语句的使用
2021/04/20 Python
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
搭建Yolov5服务器
2022/04/30 Servers
A22国内电台短波广播频率表
2022/05/10 无线电
python中filter,map,reduce的作用
2022/06/10 Python