php生成图片验证码的实例讲解


Posted in PHP onAugust 03, 2015

本文以实例演示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超级全局变量
Jan 26 PHP
php通用防注入程序 推荐
Feb 26 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
Jun 03 PHP
解析php中获取系统信息的方法
Jun 25 PHP
php中引用符号(&amp;)的使用详解
Nov 13 PHP
php禁止某ip或ip地址段访问的方法
Feb 25 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
PHP 9 大缓存技术总结
Sep 17 PHP
php示例详解Constructor Prototype Pattern 原型模式
Oct 15 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
android上传图片到PHP的过程详解
Aug 03 #PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 #PHP
php基于session实现数据库交互的类实例
Aug 03 #PHP
php通过排列组合实现1到9数字相加都等于20的方法
Aug 03 #PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 #PHP
UTF-8正则表达式如何匹配汉字
Aug 03 #PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 #PHP
You might like
PHP判断手机是IOS还是Android
2015/12/09 PHP
php socket通信简单实现
2016/11/18 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
php redis实现对200w用户的即时推送
2017/03/04 PHP
复制本贴标题和地址的js代码
2008/07/01 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
python 实现红包随机生成算法的简单实例
2017/01/04 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
使用pip安装python库的多种方式
2019/07/31 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
如何解决安装python3.6.1失败
2020/07/01 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
体育专业学生自我评价范文
2014/01/17 职场文书
5.1手机促销活动
2014/01/17 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
教师节活动主持词
2014/04/02 职场文书
启动仪式策划方案
2014/06/14 职场文书
班级团队活动方案
2014/08/14 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
承租经营合作者协议书
2014/10/01 职场文书
学习十八大宣传标语
2014/10/09 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
高三化学教学反思
2016/02/22 职场文书
Python基础详解之描述符
2021/04/28 Python
Redis实战高并发之扣减库存项目
2022/04/14 Redis
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技