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 相关文章推荐
基于mysql的bbs设计(一)
Oct 09 PHP
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
elgg 获取文件图标地址的方法
Mar 20 PHP
利用php+mysql来做一个功能强大的在线计算器
Oct 12 PHP
PHP中设置时区方法小结
Jun 03 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
整理php防注入和XSS攻击通用过滤
Sep 13 PHP
PHP多维数组转一维数组的简单实现方法
Dec 23 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
Jan 16 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
使用无限生命期Session的方法
2006/10/09 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
jquery弹出框的用法示例(一)
2013/08/26 Javascript
js关于精确计算和数值格式化以及直接引js文件
2014/01/28 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
jquery中关于bind()方法的使用技巧分享
2017/03/30 jQuery
AngularJS实现注册表单验证功能
2017/10/16 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
window下eclipse安装python插件教程
2017/04/24 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
python之mock模块基本使用方法详解
2019/06/27 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
Python图片的横坐标汉字实例
2019/12/04 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
测绘工程个人的自我评价
2013/11/23 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
校园活动策划书范文
2014/01/10 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
社区义诊活动总结
2014/04/30 职场文书
单位授权委托书范文
2014/08/02 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python