php生成图片验证码的方法


Posted in PHP onApril 15, 2016

本文为大家分享了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图片验证码

PHP 相关文章推荐
php注入实例
Oct 09 PHP
PHP 输出缓存详解
Jun 20 PHP
PHP和.net中des加解密的实现方法
Feb 27 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
Jun 04 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
Zend Framework校验器Zend_Validate用法详解
Dec 09 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
Oct 13 PHP
php中通用的excel导出方法实例
Dec 30 PHP
PHP函数积累总结
Mar 19 PHP
PHP数组实际占用内存大小原理解析
Dec 11 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
Apr 14 #PHP
php上传大文件设置方法
Apr 14 #PHP
什么是OneThink oneThink后台添加插件步骤
Apr 13 #PHP
java模拟PHP的pack和unpack类
Apr 13 #PHP
php远程下载类分享
Apr 13 #PHP
Thinkphp和onethink实现微信支付插件
Apr 13 #PHP
PHP MSSQL 分页实例
Apr 13 #PHP
You might like
PHP 选项及相关信息函数库
2006/12/04 PHP
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
PHP系列学习之日期函数使用介绍
2012/08/18 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
window.location.href的用法(动态输出跳转)
2014/08/09 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
JavaScript获取URL汇总
2015/06/08 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
jQuery.form插件的使用及跨域异步上传文件
2016/04/27 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
微信网页登录逻辑与实现方法
2019/04/29 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
python中self原理实例分析
2015/04/30 Python
python使用xpath中遇到:到底是什么?
2018/01/04 Python
TensorFlow打印tensor值的实现方法
2018/07/27 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
高三英语教学反思
2014/01/13 职场文书
婚庆答谢词
2015/01/04 职场文书
酒店工程部岗位职责
2015/02/12 职场文书
纪委立案决定书
2015/06/24 职场文书