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静态类
Nov 25 PHP
用ADODB来让PHP操作ACCESS数据库的方法
Dec 31 PHP
php下实现农历日历的代码
Mar 07 PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
thinkphp3.x中session方法的用法分析
May 20 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
Yii框架创建cronjob定时任务的方法分析
May 23 PHP
CodeIgniter框架数据库基本操作示例
May 24 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 PHP
php自动加载代码实例详解
Feb 26 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
javascript中的onkeyup和onkeydown区别介绍
2013/04/28 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
如何提高数据访问速度
2016/12/26 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
jquery自定义显示消息数量
2017/12/19 jQuery
微信小程序实现留言板(Storage)
2018/11/02 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
python中__call__方法示例分析
2014/10/11 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
Python实现按中文排序的方法示例
2018/04/25 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
2019学校请假条格式及范文
2019/06/25 职场文书
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技