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 相关文章推荐
linux php mysql数据库备份实现代码
Mar 10 PHP
PHP 编写大型网站问题集
May 07 PHP
php阻止页面后退的方法分享
Feb 17 PHP
Smarty局部缓存的几种方法简介
Jun 17 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
php实现对两个数组进行减法操作的方法
Apr 17 PHP
Yii2单元测试用法示例
Nov 12 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
PHP crc32()函数讲解
Feb 14 PHP
php常用日期时间函数实例小结
Jul 04 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
JAVA/JSP学习系列之七
2006/10/09 PHP
由php的call_user_func传reference引发的思考
2010/07/23 PHP
php中的strpos使用示例
2014/02/27 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
JS编程小常识很有用
2012/11/26 Javascript
javascript 系统文件夹文件操作及参数介绍
2013/01/08 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
node.js中的buffer.write方法使用说明
2014/12/10 Javascript
javascript折半查找详解
2015/01/26 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码
2016/12/27 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
JavaScript代码实现简单计算器
2020/12/27 Javascript
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
python发送邮件实例分享
2017/07/28 Python
python机器学习之随机森林(七)
2018/03/26 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
解决Django no such table: django_session的问题
2020/04/07 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
年级组长自我鉴定
2014/02/22 职场文书
体育馆的标语
2014/06/24 职场文书
求职自我推荐信
2014/06/25 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
公司员工违纪检讨书
2015/05/05 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python