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 相关文章推荐
使用php4加速网络传输
Oct 09 PHP
php下安装配置fckeditor编辑器的方法
Mar 02 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
php堆排序(heapsort)练习
Nov 13 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
php 无限级分类 获取顶级分类ID
Mar 13 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
Oct 23 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
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
javascript cookies操作集合
2010/04/12 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
python解析中国天气网的天气数据
2014/03/21 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
彻底解决Python包下载慢问题
2020/11/15 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
公司部门司机岗位职责
2014/01/03 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
团队激励口号
2014/06/06 职场文书
高三语文复习计划
2015/01/19 职场文书
好好学习保证书
2015/02/26 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
小学家长意见怎么写
2015/06/03 职场文书
mysql查询的控制语句图文详解
2021/04/11 MySQL
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript