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 smarty 二级分类代码和模版循环例子
Jun 16 PHP
php 操作调试的方法
Jul 12 PHP
php中explode与split的区别介绍
Oct 03 PHP
PHP基础之运算符的使用方法
Apr 28 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
May 24 PHP
php中文乱码问题的终极解决方案汇总
Aug 01 PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
PHP实现一个轻量级容器的方法
Jan 28 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
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
默默小谈PHP&amp;MYSQL分页原理及实现
2007/01/02 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
解析PHP实现下载文件的两种方法
2013/07/05 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
PHP判断网络文件是否存在的方法
2015/03/12 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
python编码最佳实践之总结
2016/02/14 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
缓解脚、腿和背部疼痛:Z-CoiL鞋
2019/03/12 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
学前班教师的自我鉴定
2013/12/05 职场文书
销售主管的自我评价分享
2014/01/03 职场文书
初中生评语大全
2014/04/24 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
2014年纠风工作总结
2014/12/08 职场文书
退税申请报告怎么写
2015/05/18 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
思想品德课教学反思
2016/02/24 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
Redis实现一个账号只能登录一个设备
2022/04/19 Redis
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技