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与XML的PDF文档生成技术
Oct 09 PHP
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
检测png图片是否完整的php代码
Sep 06 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
Jul 28 PHP
php生成随机数的三种方法
Sep 10 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
Sep 12 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
ThinkPHP 5.1 跨域配置方法
Oct 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
PHP之数组学习
2011/05/29 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python变量作用范围实例分析
2015/07/07 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
行政前台岗位职责
2013/12/04 职场文书
信访工作者先进事迹
2014/01/17 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
教师求职简历自我评价
2015/03/10 职场文书
员工拾金不昧表扬稿
2015/05/05 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
MongoDB使用场景总结
2022/02/24 MongoDB