php生成图片验证码-附五种验证码


Posted in PHP onAugust 19, 2015

以前输出验证码的时候用过一个方法,在前台用JS生成验证码字符串,再传递到后台用PHP输出验证码图像。这样在验证时就不需要使用$_SESSION传递验证码的值,直接用JS比较生成的字符串和输入的字符串是否相等即可。

本文以实例演示5种验证码,并介绍生成验证码的函数。PHP生成验证码的原理:通过GD库,生成一张带验证码的图片,并将验证码保存在Session中。

php生成图片验证码-附五种验证码

1、HTML

5中验证码HTML代码如下:

<div class="demo">


 <h3>1、数字验证码</h3>
 <p>验证码:<input type="text" class="input" id="code_num" name="code_num" maxlength="4" /> <img src="code_num.php" id="getcode_num" title="看不清,点击换一张" align="absmiddle" /></p>
 <p><input type="button" class="btn" id="chk_num" value="提交" /></p>
 </div>
 <div class="demo">
<h3>2、数字+字母验证码</h3>
 <p>验证码:<input type="text" class="input" id="code_char" maxlength="4" /> <img src="code_char.php" id="getcode_char" title="看不清,点击换一张" align="absmiddle" /></p>
 <p><input type="button" class="btn" id="chk_char" value="提交" /></p>
 </div>
 <div class="demo">
<h3>3、中文验证码</h3>
 <p>验证码:<input type="text" class="input" id="code_zh" maxlength="4" /> <img src="code_zh.php" id="getcode_zh" title="看不清,点击换一张" align="absmiddle" /></p>
 <p><input type="button" class="btn" id="chk_zh" value="提交" /></p>
 </div>
 <div class="demo">
<h3>4、仿google验证码</h3>
 <p>验证码:<input type="text" class="input" id="code_gg" maxlength="4" /> <img src="code_gg.php" id="getcode_gg" title="看不清,点击换一张" align="absmiddle" /></p>
 <p><input type="button" class="btn" id="chk_gg" value="提交" /></p>
 </div>
 <div class="demo">


 
<h3>5、算术验证码</h3>
 <p>验证码:<input type="text" class="input" id="code_math" maxlength="4" /> <img src="code_math.php" id="getcode_math" title="看不清,点击换一张" align="absmiddle" /></p>
 <p><input type="button" class="btn" id="chk_math" value="提交" /></p>
</div>

2、js验证

$(function() {
 $("#getcode_num").click(function() { //数字验证
 $(this).attr("src", 'code_num.php?' + Math.random());
 });
 $("#chk_num").click(function() {
 var code_num = $("#code_num").val();
 $.post("chk_code.php?act=num", {
  code: code_num
 },
 function(msg) {
  if (msg == 1) {
  alert("验证码正确!");
  } else {
  alert("验证码错误!");
  }
 });
 });

    //数字+字母验证

$("#getcode_char").click(function() {
 $(this).attr("src", 'code_char.php?' + Math.random());
 });
 $("#chk_char").click(function() {
 var code_char = $("#code_char").val();
 $.post("chk_code.php?act=char", {
  code: code_char
 },
 function(msg) {
  if (msg == 1) {
  alert("验证码正确!");
  } else {
  alert("验证码错误!");
  }
 });
 });

    //中文验证码

$("#getcode_zh").click(function() {
 $(this).attr("src", 'code_zh.php?' + Math.random());
 });
 $("#chk_zh").click(function() {
 var code_zh = escape($("#code_zh").val());
 $.post("chk_code.php?act=zh", {
  code: code_zh
 },
 function(msg) {
  if (msg == 1) {
  alert("验证码正确!");
  } else {
  alert("验证码错误!");
  }
 });
 });

    //google验证

$("#getcode_gg").click(function() {
 $(this).attr("src", 'code_gg.php?' + Math.random());
 });
 $("#chk_gg").click(function() {
 var code_gg = $("#code_gg").val();
 $.post("chk_code.php?act=gg", {
  code: code_gg
 },
 function(msg) {
  if (msg == 1) {
  alert("验证码正确!");
  } else {
  alert("验证码错误!");
  }
 });
 });

    //算术验证 

$("#getcode_math").click(function() {
 $(this).attr("src", 'code_math.php?' + Math.random());
 });
 $("#chk_math").click(function() {
 var code_math = $("#code_math").val();
 $.post("chk_code.php?act=math", {
  code: code_math
 },
 function(msg) {
  if (msg == 1) {
  alert("验证码正确!");
  } else {
  alert("验证码错误!");
  }
 });
 });
});

3、PHP生成验证码

session_start();
getCode(4,60,20);
function getCode($num,$w,$h) {
 $code = "";
 for ($i = 0; $i < $num; $i++) {
 $code .= rand(0, 9);
 }
 //4位验证码也可以用rand(1000,9999)直接生成
 //将生成的验证码写入session,备验证时用
 $_SESSION["helloweba_num"] = $code;
 //创建图片,定义颜色值
 header("Content-type: image/PNG");
 $im = imagecreate($w, $h);
 $black = imagecolorallocate($im, 0, 0, 0);
 $gray = imagecolorallocate($im, 200, 200, 200);
 $bgcolor = imagecolorallocate($im, 255, 255, 255);
 //填充背景
 imagefill($im, 0, 0, $gray);
 //画边框
 imagerectangle($im, 0, 0, $w-1, $h-1, $black);
 //随机绘制两条虚线,起干扰作用
 $style = array ($black,$black,$black,$black,$black,
 $gray,$gray,$gray,$gray,$gray
 );
 imagesetstyle($im, $style);
 $y1 = rand(0, $h);
 $y2 = rand(0, $h);
 $y3 = rand(0, $h);
 $y4 = rand(0, $h);
 imageline($im, 0, $y1, $w, $y3, IMG_COLOR_STYLED);
 imageline($im, 0, $y2, $w, $y4, IMG_COLOR_STYLED);
 //在画布上随机生成大量黑点,起干扰作用;
 for ($i = 0; $i < 80; $i++) {
 imagesetpixel($im, rand(0, $w), rand(0, $h), $black);
 }
 //将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成
 $strx = rand(3, 8);
 for ($i = 0; $i < $num; $i++) {
 $strpos = rand(1, 6);
 imagestring($im, 5, $strx, $strpos, substr($code, $i, 1), $black);
 $strx += rand(8, 12);
 }
 imagepng($im);//输出图片
 imagedestroy($im);//释放图片所占内存
}

以上内容就是php生成图片验证码-附五种验证码的全部内容,希望大家喜欢。

PHP 相关文章推荐
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
PHP中array_slice函数用法实例详解
Nov 25 PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 PHP
php通过curl模拟登陆DZ论坛
May 11 PHP
PHP版QQ互联OAuth示例代码分享
Jul 05 PHP
php实现微信模板消息推送
Mar 30 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
PHP封装的完整分页类示例
Aug 21 PHP
PHP implode()函数用法讲解
Mar 08 PHP
Laravel+Intervention实现上传图片功能示例
Jul 09 PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 #PHP
深入探究PHP的多进程编程方法
Aug 18 #PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 #PHP
PHP的命令行命令使用指南
Aug 18 #PHP
使用PHP生成图片的缩略图的方法
Aug 18 #PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 #PHP
详解PHP中的mb_detect_encoding函数使用方法
Aug 18 #PHP
You might like
php4的彩蛋
2006/10/09 PHP
c#中的实现php中的preg_replace
2009/12/21 PHP
理解PHP中的stdClass类
2014/04/18 PHP
两种php实现图片上传的方法
2016/01/22 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
PHP时间函数使用详解
2019/03/21 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
2007/03/06 Javascript
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
JavaScript 题型问答有答案参考
2010/02/17 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
利用matplotlib+numpy绘制多种绘图的方法实例
2017/05/03 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
python 线性回归分析模型检验标准--拟合优度详解
2020/02/24 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
园林资料员岗位职责
2013/12/30 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
收入证明怎么写
2015/06/12 职场文书
Vue.js中v-bind指令的用法介绍
2022/03/13 Vue.js