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 相关文章推荐
PHP 中的一些经验积累
Oct 09 PHP
PHP的FTP学习(二)
Oct 09 PHP
PHP网站备份程序代码分享
Jun 10 PHP
apache mysql php 源码编译使用方法
May 03 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
smarty简单应用实例
Nov 03 PHP
验证坐标在某坐标区域内php代码
Oct 08 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
php 数组元素快速去重
May 05 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 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
从零开始 教你如何搭建Discuz!4.1论坛
2006/07/07 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
javascript实现的listview效果
2007/04/28 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
微信小程序框架的页面布局代码
2019/08/17 Javascript
layui使用label标签的方法
2019/09/14 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
vue编写简单的购物车功能
2021/01/08 Vue.js
基于Python实现文件大小输出
2016/01/11 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python实现飞船游戏的纵向移动
2020/04/24 Python
美国著名的女性内衣零售商:Frederick’s of Hollywood
2018/02/24 全球购物
美国家居装饰店:Pier 1
2019/09/04 全球购物
高中毕业生生活的自我评价
2013/12/08 职场文书
kfc实习自我鉴定
2013/12/14 职场文书
审计班子对照检查材料
2014/08/27 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
2014年库房工作总结
2014/11/26 职场文书
阿甘正传观后感
2015/06/01 职场文书