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 09 PHP
PHP 5.0对象模型深度探索之对象复制
Mar 27 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
yii使用activeFileField控件实现上传文件与图片的方法
Dec 28 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 PHP
yii2利用自带UploadedFile实现上传图片的示例
Feb 16 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 curl 或 file_get_contents 获取需要授权页面的方法
2017/05/05 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
js中less常用的方法小结
2017/08/09 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
python实现bitmap数据结构详解
2014/02/17 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Python装饰器用法实例总结
2018/02/07 Python
python正则实现提取电话功能
2018/02/24 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python pygame实现五子棋小游戏
2020/10/26 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
新媒传信软件测试面试题
2013/02/24 面试题
交通安全演讲稿
2014/01/07 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
教师教学评估方案
2014/05/09 职场文书
个人查摆剖析材料
2014/10/04 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
老公保证书怎么写
2015/02/26 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
趣味运动会标语口号
2015/12/26 职场文书