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中创建并处理图象
Oct 09 PHP
谈谈PHP语法(3)
Oct 09 PHP
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
PHP 已经成熟
Dec 04 PHP
PHP高级OOP技术演示
Aug 27 PHP
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
PHP向socket服务器收发数据的方法
Jan 24 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
Dec 13 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 PHP
PHP数组对象与Json转换操作实例分析
Oct 22 PHP
微信小程序发送订阅消息的方法(php 为例)
Oct 30 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
Protoss兵种对照表
2020/03/14 星际争霸
PHP 图片上传实现代码 带详细注释
2010/04/29 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
微信小程序搭建自己的Https服务器
2019/05/02 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
在Python中COM口的调用方法
2019/07/03 Python
利用python list完成最简单的DB连接池方法
2019/08/09 Python
Django 框架模型操作入门教程
2019/11/05 Python
Python wordcloud库安装方法总结
2020/12/31 Python
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
关于递归的一道.NET面试题
2013/05/12 面试题
市场营销专业个人求职信范文
2013/12/14 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
承诺书的签字人,需不需要承担相应的责任?
2019/07/09 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android