php实现的数字验证码及数字运算验证码


Posted in PHP onJuly 30, 2015

本文实例讲述了php实现的数字验证码及数字运算验证码。分享给大家供大家参考。具体如下:

1. 数字验证码:

<?php
//第一个实例是数字验证码,最常见的验证码。多少个数字可以由自己决定。
//$num是生成的验证码包含几个数字
getValidate(4,60,20);
function getValidate($num,$w,$h){
  $code = "";
  for($i=0;$i<$num;$i++){
    $code .= rand(0,9);
  }
  //code变量最后是$num个数字,并且是字符串。因袭如果是生成四位的数字验证码,可以用rand(1000,9999)生成
  Header("Content-type:image/PNG");
  $img = imagecreate($w,$h);//创建图片,长宽参数是一开始定义好的。
  $black = imagecolorallocate($img,0,0,0);//定义黑色
  $gray = imagecolorallocate($img,200,200,200);//定义灰色
  $bgcolor = imagecolorallocate($img,255,255,255);//背景色白色
  imagefill($img,0,0,$gray);
  //imagefill($image,ing $x,int $y,int $color),在image图像的坐标x,y处用color颜色执行区域填充
  //给验证码画上边框,感觉验证码美美的,其实呢画边框就是给他画上一个矩形
  imagerectangle($img,0,0,$w-1,$h-1,$black);//用黑色的框框
  /*imagestring($image,$font,$x,$y,$s,$col)
  用col颜色将字符串s画到image所代表的图像的x,y处(xy是字符串的左上角坐标),
  整幅图像的左上角为(0,0)如果font是1,2,3,4,5则使用内置字体*/
  //一下是画四个数字的方法,让四个字符位置都随机等
  $strx = rand(5,10);
  for($i = 0;$i < $num;$i++){
    $strops = rand(1,6);
    imagestring($img,5,$strx,$strops,substr($code,$i,1),$black);
    $strx += rand(8,12);
    //strx是横坐标,需要每一次加上之前的坐标,保证不会重叠。纵坐标不管
  }
  //substr() 函数返回字符串的一部分,substr(string,start,length),要截取的字符串,start开始位置,length截取的长度
  //生成好了数字,下面要给验证码区域一些干扰,防止一些工具可以自动识别
  //1.方法一:给背景加上很多噪点
  //imagesetpixel($image,$x,$y,$color),在image图像中用color颜色在x,y坐标(图像左上角为0,0)上画一个点
  for($i = 0;$i<80;$i++){
    imagesetpixel($img, rand(0,$w), rand(0,$h), $black);//这些点分布在这个背景里面
  }
  //2.方法二:绘制几条虚线
  $style = array($black,$gray);
  imagesetstyle($img, $style);
  //imagesetstyle($image,$style),设定画线的风格,像素组成的数组
  $y1 = rand(0,$h);
  $y2 = rand(0,$h);
  $y3 = rand(0,$h);
  $y4 = rand(0,$h);
  imageline($img,0,$y1,$w,$y2,IMG_COLOR_STYLED);
  imageline($img,0,$y3,$w,$y4,IMG_COLOR_STYLED);
  imagepng($img);
  imagedestroy($img);
}
?>

2. 数字运算验证码:

<?php
getValidate(100,30);
function getValidate($w,$h){
  $img = imagecreate($w,$h);
  $gray = imagecolorallocate($img,255,255,255);
  $black = imagecolorallocate($img,rand(0,200),rand(0,200),rand(0,200));
  $red = imagecolorallocate($img, 255, 0, 0);
  $white = imagecolorallocate($img, 255, 255, 255);
  $green = imagecolorallocate($img, 0, 255, 0);
  $blue = imagecolorallocate($img, 0, 0, 255);
  imagefilledrectangle($img, 0, 0, 100, 30, $black);
  for($i = 0;$i < 80;$i++){
    imagesetpixel($img, rand(0,$w), rand(0,$h), $gray);
  }
  $num1 = rand(1,99);
  $num2 = rand(1,99);
  imagestring($img, 5, 5, rand(1,10), $num1, $red);
  imagestring($img,5,30,rand(1,10),getRand(), $white);
  imagestring($img,5,45,rand(1,10),$num2, $green);
  imagestring($img,5,65,rand(1,10),"=", $blue);
  imagestring($img,5,80,rand(1,10),"?", $red);
  header("content-type:image/png");
  imagepng($img);
  imagedestroy($img);
}
function getRand(){
  $code = rand(0,1);
  switch ($code) {
    case 0:
      return "+";
      break;
    case 1:
      return "-";
      break;
    default:
      # code...
      break;
  }
}
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
深入理解php的MySQL连接类
Jun 07 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
codeigniter框架批量插入数据
Jan 09 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 PHP
2014年最新推荐的10款 PHP 开发框架
Aug 01 PHP
php使用session二维数组实例
Nov 06 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
PHP异常处理浅析
May 12 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
学习php设计模式 php实现备忘录模式(Memento)
Dec 09 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 #PHP
PHP实现批量修改文件后缀名的方法
Jul 30 #PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 #PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 #PHP
php实现curl模拟ftp上传的方法
Jul 29 #PHP
php实现复制移动文件的方法
Jul 29 #PHP
详解PHP中的Traits
Jul 29 #PHP
You might like
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
thinkPHP自动验证、自动添加及表单错误问题分析
2016/10/17 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
jQuery示例收集
2010/11/05 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
jquery弹出框的用法示例(一)
2013/08/26 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
微信JS接口大全
2016/08/25 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
Python 3中的yield from语法详解
2017/01/18 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python实现括号匹配方法详解
2020/02/10 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
自我鉴定的范文
2013/10/03 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
中考标语大全
2014/06/05 职场文书
自我介绍演讲稿范文
2014/08/21 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
劳动模范获奖感言
2015/07/31 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android
MySQL新手入门进阶语句汇总
2022/09/23 MySQL