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下通过POST还是GET来传值
Jun 05 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
Dec 19 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
php英文单词统计器
Jun 23 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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实现文件下载(支持中文文名)
2013/12/04 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
jQuery性能优化28条建议你值得借鉴
2013/02/16 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
vue中解决chrome浏览器自动播放音频和MP3语音打包到线上的实现方法
2020/10/09 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
教你安装python Django(图文)
2013/11/04 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
科室工作的个人自我评价
2013/10/30 职场文书
社区党总支书记先进事迹材料
2014/01/24 职场文书
新书发布会策划方案
2014/06/09 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
个人查摆剖析材料
2014/10/16 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
2016秋季幼儿园开学寄语
2015/12/03 职场文书
《颐和园》教学反思
2016/02/19 职场文书
python not运算符的实例用法
2021/06/30 Python
实现一个简单得数据响应系统
2021/11/11 Javascript