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.MVC的模板标签系统(五)
Sep 05 PHP
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
Oct 09 PHP
PHP-MySQL教程归纳总结
Jun 07 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
php返回字符串中所有单词的方法
Mar 09 PHP
为百度UE编辑器上传图片添加水印功能
Apr 16 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
PHP simplexml_import_dom()函数讲解
Feb 03 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 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下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
php查看网页源代码的方法
2015/03/13 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
2017/04/25 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
express框架实现基于Websocket建立的简易聊天室
2017/08/10 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
微信小程序实现侧边分类栏
2019/10/21 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
python实现自动更换ip的方法
2015/05/05 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
eDreams巴西:廉价机票,酒店优惠和度假套餐
2017/04/14 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
产品工艺师的岗位职责
2013/11/15 职场文书
回门宴父母答谢词
2014/01/26 职场文书
大学毕业感言200字
2014/03/09 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
周年庆典答谢词
2015/01/20 职场文书
德能勤绩工作总结
2015/08/11 职场文书