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编程效率的53个要点(经验小结)
Sep 04 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
php多个文件及图片上传实例详解
Nov 10 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
Apr 08 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
php递归实现无限分类的方法
Jul 28 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
php快速排序原理与实现方法分析
May 26 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 PHP
PHP session垃圾回收机制实例分析
Jun 28 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
用PHP实现WEB动态网页静态
2006/10/09 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
浅谈tudou土豆网首页图片延迟加载的效果
2010/06/23 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
解决vue中el-tab-pane切换的问题
2020/07/19 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
pygame学习笔记(4):声音控制
2015/04/15 Python
python中返回矩阵的行列方法
2018/04/04 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Python实现的多项式拟合功能示例【基于matplotlib】
2018/05/15 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
不假外出检讨书
2014/01/27 职场文书
酒店保安领班职务说明书
2014/03/04 职场文书
平安工地汇报材料
2014/08/19 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
2016思想纪律作风整顿心得体会
2016/01/23 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python