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 相关文章推荐
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
php下载文件的代码示例
Jun 29 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
让PHP显示Facebook的粉丝数量方法
Jan 08 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
php简单实现发送带附件的邮件
Jun 10 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
Jul 08 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 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用strstr()函数阻止垃圾评论(通过判断a标记)
2013/09/28 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
心扬JS分页函数代码
2010/09/10 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
javascript自动给文本url地址增加链接的方法分享
2014/01/20 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
Python生成随机密码
2015/03/10 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
python简单读取大文件的方法
2016/07/01 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
python 追踪except信息方式
2020/04/25 Python
Django实现内容缓存实例方法
2020/06/30 Python
Python异常处理机制结构实例解析
2020/07/23 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
为什么需要版本控制
2016/10/28 面试题
市场部规章制度
2014/01/24 职场文书
酒后驾驶检讨书
2014/01/27 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
2015年酒店销售部工作总结
2015/07/24 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
Pytorch使用shuffle打乱数据的操作
2021/05/20 Python