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之对抗Web扫描器的脚本技巧
Oct 01 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
phpexcel导入excel数据使用方法实例
Dec 24 PHP
PHP中的替代语法简介
Aug 22 PHP
php实现删除空目录的方法
Mar 16 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
Oct 11 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
php实现小程序支付完整版
Oct 09 PHP
laravel5实现微信第三方登录功能
Dec 06 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php获取文件大小的方法
2014/02/26 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
python中pygame模块用法实例
2014/10/09 Python
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
护士个人简历自荐信
2013/10/18 职场文书
测绘工程系学生的自我评价
2013/11/30 职场文书
高中化学教学反思
2014/01/13 职场文书
营销总监岗位职责
2014/09/16 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
2014年外联部工作总结
2014/11/17 职场文书
小学生优秀评语
2014/12/29 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
历史博物馆观后感
2015/06/05 职场文书
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android