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 miniBB中文乱码问题解决方法
Nov 25 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
利用PHP函数计算中英文字符串长度的方法
Nov 11 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
PHP微信PC二维码登陆的实现思路
Jul 13 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
基于mysql的bbs设计(一)
2006/10/09 PHP
分享PHP入门的学习方法
2007/01/02 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
yii2.0框架使用 beforeAction 防非法登陆的方法分析
2019/09/11 PHP
Laravel框架Eloquent ORM删除数据操作示例
2019/12/03 PHP
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
React如何避免重渲染
2018/04/10 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Windows下Python的Django框架环境部署及应用编写入门
2016/03/10 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
keras 如何保存最佳的训练模型
2020/05/25 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
使用HTML5捕捉音频与视频信息概述及实例
2018/08/22 HTML / CSS
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android