php中使用GD库做验证码


Posted in PHP onMarch 31, 2016
<?php 
require_once 'string.func.php';
//通过GD库做验证码
/**
 *添加验证文字
 * @param int $type
 * @param int $length
*/
function buildRandomString($type=1,$length=4){
  $row='';
  if($type==1){
    $row=join('',range(0, 9));
  }else if($type==2){
    $row=join('', array_merge(range('a','z'),range('A', 'Z')));
  }else if($type==3){
    $row=join('', array_merge(range('a','z'),range('A', 'Z'),range(0, 9)));
  };
  $row=str_shuffle($row);
  
  $row=substr($row,0,$length);
  return $row;
}
/**
 * 生成缩略图
 * @param int $type //包含数字或者英文
 * @param int $length 多少个字符
 * @param int $pixel 干扰小点的密度
 * @param int $dst_h 干扰线的密度
 * @param string //验证码在$_SESSION中的名字
 */

function verifyImage($type=1,$length=4,$pixel=0,$line=0,$sess_name = "verify"){
  //session_start();
  //创建画布
  $width = 100;
  $height = 40;
  $image = imagecreatetruecolor ( $width, $height );
  $white = imagecolorallocate ( $image, 255, 255, 255 );
  $black = imagecolorallocate ( $image, 0, 0, 0 );
  //用填充矩形填充画布
  imagefilledrectangle ( $image, 1, 1, $width - 2, $height - 2, $white );
  $chars = buildRandomString ( $type, $length );
  $_SESSION [$sess_name] = $chars;
  //$fontfiles = array ("MSYH.TTF", "MSYHBD.TTF", "SIMLI.TTF", "SIMSUN.TTC", "SIMYOU.TTF", "STZHONGS.TTF" );
  $fontfiles = array ("SIMKAI.TTF" );
  //由于字体文件比较大,就只保留一个字体,如果有需要的同学可以自己添加字体,字体在你的电脑中的fonts文件夹里有,直接运行输入fonts就能看到相应字体
  for($i = 0; $i < $length; $i ++) {
    $size = mt_rand ( 14, 18 );
    $angle = mt_rand ( - 15, 15 );
    $x = 5 + $i * $size;
    $y = mt_rand ( 20, 26 );
    $fontfile = "../fonts/" . $fontfiles [mt_rand ( 0, count ( $fontfiles ) - 1 )];
    $color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );
    $text = substr ( $chars, $i, 1 );
    imagettftext ( $image, $size, $angle, $x, $y, $color, $fontfile, $text );
  }
  if ($pixel) {
    for($i = 0; $i < 50; $i ++) {
      imagesetpixel ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $black );
    }
  }
  if ($line) {
    for($i = 1; $i < $line; $i ++) {
      $color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );
      imageline ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $color );
    }
  }
  header ( "content-type:image/gif" );
  imagegif ( $image );
  imagedestroy ( $image );
}

主要要点:

1、如果前面没有申明session_start();则需要申明;
2、字体可以在cmf输入fonts下载到自己定义的fonts文件夹;
3、$_SESSION [$sess_name]可以通过$_POST获得用户输入的验证码进行比较。

PHP 相关文章推荐
PHP 反射机制实现动态代理的代码
Oct 22 PHP
PHP 多维数组排序实现代码
Aug 05 PHP
PHP print类函数使用总结
Jun 25 PHP
PHP中PDO的错误处理
Sep 04 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
php 强制下载文件实现代码
Oct 28 PHP
使用php清除bom示例
Mar 03 PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 PHP
php面象对象数据库操作类实例
Dec 02 PHP
PHP简单遍历对象示例
Sep 28 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 PHP
PHP时间相关常用函数用法示例
Jun 03 PHP
php实现搜索类封装示例
Mar 31 #PHP
PHP-FPM实现性能优化
Mar 31 #PHP
PHP实现通过URL提取根域名
Mar 31 #PHP
PHP的PDO操作简单示例
Mar 30 #PHP
PHP Smarty模版简单使用方法
Mar 30 #PHP
PHP格式化MYSQL返回float类型的方法
Mar 30 #PHP
PHP获取网页所有连接的方法(附demo源码下载)
Mar 30 #PHP
You might like
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
javascript中this指向详解
2016/04/23 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
vue-router二级导航切换路由及高亮显示的实现方法
2019/07/10 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
Vue性能优化的方法
2020/07/30 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python实现截屏的函数
2015/07/25 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Python读取properties配置文件操作示例
2018/03/29 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
Python包和模块的分发详细介绍
2020/06/19 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
实体的生命周期
2013/08/31 面试题
小学教师办公室制度
2014/02/03 职场文书
2014年师德承诺书
2014/05/23 职场文书
煤矿安全协议书
2014/08/20 职场文书
超市工作总结范文2014
2014/12/19 职场文书
继承权公证书范本
2015/01/23 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android