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 相关文章推荐
ionCube 一款类似zend的PHP加密/解密工具
Jul 25 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
PHP连接MySQL数据的操作要点
Mar 20 PHP
Yii2框架使用计划任务的方法
May 25 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
Yii2框架数据验证操作实例详解
May 02 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 PHP
PHP unset函数原理及使用方法解析
Aug 14 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
php5新改动之短标记启用方法
2008/09/11 PHP
php反射应用示例
2014/02/25 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
php封装的smartyBC类完整实例
2016/10/19 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
php的instanceof和判断闭包Closure操作示例
2020/01/26 PHP
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
Python入门篇之数字
2014/10/20 Python
Python读写ini文件的方法
2015/05/28 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
结婚喜宴家长答谢词
2014/01/15 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
销售活动策划方案
2014/08/26 职场文书
就业协议书怎么填
2014/09/15 职场文书
小学生安全教育广播稿
2014/10/20 职场文书
会计专业自荐信范文
2015/03/05 职场文书
安全承诺书格式范本
2015/04/28 职场文书
一个独生女的故事观后感
2015/06/04 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android