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 相关文章推荐
php读取html并截取字符串的简单代码
Nov 30 PHP
国外比较好的几个的Php开源建站平台小结
Apr 22 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
May 16 PHP
php正则判断是否为合法身份证号的方法
Mar 16 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 PHP
php5.x禁用eval的操作方法
Oct 19 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
PHP dirname功能及原理实例解析
Oct 28 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
php中fgetcsv()函数用法实例
2014/11/28 PHP
php实现的用户查询类实例
2015/06/18 PHP
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
2013/05/30 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
详解10分钟学会vue滚动行为
2017/09/21 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
2020/02/06 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
Python装饰器decorator用法实例
2014/11/10 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
python+flask实现API的方法
2018/11/21 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
性能服装:HYLETE
2018/08/14 全球购物
客服专员岗位职责
2014/02/28 职场文书
认错检讨书
2014/10/02 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
学校推普周活动总结
2015/05/07 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
2021/04/01 PHP
python基础学习之递归函数知识总结
2021/05/26 Python
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
Python几种酷炫的进度条的方式
2022/04/11 Python