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 相关文章推荐
一个多文件上传的例子(原创)
Oct 09 PHP
使用PHP模拟HTTP认证
Oct 09 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
PHP实现一个多功能购物网站的案例
Sep 13 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP实现的日历功能示例
Sep 01 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 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
yii2使用ajax返回json的实现方法
2016/05/14 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
javascript动态加载三
2012/08/22 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
Vue项目中使用mock.js的完整步骤
2021/01/12 Vue.js
用python代码做configure文件
2014/07/20 Python
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
多个应用共存的Django配置方法
2018/05/30 Python
python使用PIL给图片添加文字生成海报示例
2018/08/17 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
Python-openpyxl表格读取写入的案例详解
2020/11/02 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
运动会入场解说词
2014/02/07 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
如何写好闭幕词
2019/04/02 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python
React自定义hook的方法
2022/06/25 Javascript
js面向对象编程OOP及函数式编程FP区别
2022/07/07 Javascript