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 相关文章推荐
全文搜索和替换
Oct 09 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
简单解决微信文章图片防盗链问题
Dec 17 PHP
php往mysql中批量插入数据实例教程
Dec 12 PHP
PHP的PDO预处理语句与存储过程
Jan 27 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
探讨捕获php错误信息方法的详解
2013/06/09 PHP
php读取mysql的简单实例
2014/01/15 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
Vue.js上传图片到阿里云OSS存储的方法示例
2018/12/13 Javascript
vue多次循环操作示例
2019/02/08 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python文件的读写和异常代码示例
2017/10/31 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
Python关于反射的实例代码分享
2020/02/20 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
Python grpc超时机制代码示例
2020/09/14 Python
Python Selenium操作Cookie的实例方法
2021/02/28 Python
哪些情况下不应该使用索引
2015/07/20 面试题
毕业生自我推荐
2013/11/04 职场文书
网站设计师的岗位职责
2013/11/21 职场文书
人事部专员岗位职责
2014/03/04 职场文书
母婴店促销方案
2014/03/05 职场文书
商场消防安全责任书
2014/07/29 职场文书
新闻稿格式范文
2015/07/18 职场文书
六年级数学教学反思
2016/02/16 职场文书
使用canvas实现雪花飘动效果的示例代码
2021/03/30 HTML / CSS