php生成图形验证码几种方法小结


Posted in PHP onAugust 15, 2013

我们先来检查一下自己的php是不是打开了gd库。

<?php
if(extension_loaded('gd')) {
  echo '你可以使用gd<br>';
  foreach(gd_info() as $cate=>$value)
    echo "$cate: $value<br>";
}else
  echo '你没有安装gd扩展';
?>

如果有返回信息就正确可以常用使用了
例1
<?php
/**
 * vCode(m,n,x,y) m个数字  显示大小为n   边宽x   边高y
 * 自己改写记录session $code
 */
session_start(); 
vCode(4, 15); //4个数字,显示大小为15
function vCode($num = 4, $size = 20, $width = 0, $height = 0) {
 !$width && $width = $num * $size * 4 / 5 + 5;
 !$height && $height = $size + 10; 
 // 去掉了 0 1 O l 等
 $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW";
 $code = '';
 for ($i = 0; $i < $num; $i++) {
  $code .= $str[mt_rand(0, strlen($str)-1)];
 } 
 // 画图像
 $im = imagecreatetruecolor($width, $height); 
 // 定义要用到的颜色
 $back_color = imagecolorallocate($im, 235, 236, 237);
 $boer_color = imagecolorallocate($im, 118, 151, 199);
 $text_color = imagecolorallocate($im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120)); 
 // 画背景
 imagefilledrectangle($im, 0, 0, $width, $height, $back_color); 
 // 画边框
 imagerectangle($im, 0, 0, $width-1, $height-1, $boer_color); 
 // 画干扰线
 for($i = 0;$i < 5;$i++) {
  $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  imagearc($im, mt_rand(- $width, $width), mt_rand(- $height, $height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color);
 } 
 // 画干扰点
 for($i = 0;$i < 50;$i++) {
  $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $font_color);
 } 
 // 画验证码
 @imagefttext($im, $size , 0, 5, $size + 3, $text_color, 'c:\WINDOWS\Fonts\simsun.ttc', $code);
 $_SESSION["VerifyCode"]=$code; 
 header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate");
 header("Content-type: image/png;charset=gb2312");
 imagepng($im);
 imagedestroy($im);
}
?>

例2
使用PHP,结合session和GD库扩展开发的一个生成验证码的例子(w3c推荐),可以很方便的用于项目中。而且样式美观
//首先开启session
session_start();
//定义前台显示验证码长&宽
$image_width = 120;
$image_height = 40;
$characters_on_image = 6;
$font = './monofont.ttf';
//The characters that can be used in the CAPTCHA code.
//avoid confusing characters (l 1 and i for example)
$possible_letters = '23456789bcdfghjkmnpqrstvwxyz';
$random_dots = 10;
$random_lines = 30;
$captcha_text_color="0x142864";
$captcha_noice_color = "0x142864";
//定义要生成验证码的字符串
$code = '';
$i = 0;
while ($i < $characters_on_image) {
$code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);
$i++;
}
$font_size = $image_height * 0.75;
$image = @imagecreate($image_width, $image_height);
/* setting the background, text and noise colours here */
$background_color = imagecolorallocate($image, 255, 255, 255);
$arr_text_color = hexrgb($captcha_text_color);
$text_color = imagecolorallocate($image, $arr_text_color['red'],
        $arr_text_color['green'], $arr_text_color['blue']);
$arr_noice_color = hexrgb($captcha_noice_color);
$image_noise_color = imagecolorallocate($image, $arr_noice_color['red'],
        $arr_noice_color['green'], $arr_noice_color['blue']);
/* generating the dots randomly in background */
for( $i=0; $i<$random_dots; $i++ ) {
imagefilledellipse($image, mt_rand(0,$image_width),
 mt_rand(0,$image_height), 2, 3, $image_noise_color);
}
/* generating lines randomly in background of image */
for( $i=0; $i<$random_lines; $i++ ) {
imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height),
 mt_rand(0,$image_width), mt_rand(0,$image_height), $image_noise_color);
}
/* create a text box and add 6 letters code in it */
$textbox = imagettfbbox($font_size, 0, $font, $code);
$x = ($image_width - $textbox[4])/2;
$y = ($image_height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code);
/* Show captcha image in the page html page */
header('Content-Type: image/jpeg');// defining the image type to be shown in browser widow
imagejpeg($image);//showing the image
imagedestroy($image);//destroying the image instance
//设置session,做验证
$_SESSION['6_letters_code'] = $code;
function hexrgb ($hexstr)
{
  $int = hexdec($hexstr);
  return array("red" => 0xFF & ($int >> 0x10),
               "green" => 0xFF & ($int >> 0x8),
               "blue" => 0xFF & $int);
}

个人推荐推荐第二个生成验证码程序代码,各位同学可尝试参考对比哦,最后一个是W3C标准生成的也是利用了php gd库。
PHP 相关文章推荐
PHP函数学习之PHP函数点评
Jul 05 PHP
PHP判断是否有Get参数的方法
May 05 PHP
php中curl使用指南
Feb 05 PHP
php邮件发送的两种方式
Apr 28 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
PHP两种实现无级递归分类的方法
Mar 02 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP实现图片压缩
Sep 09 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 PHP
thinkPHP事务操作简单案例分析
Oct 17 PHP
PHP判断是否是json字符串
Apr 01 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 #PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
Aug 15 #PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
Aug 13 #PHP
php使用sql数据库 获取字段问题介绍
Aug 12 #PHP
完美解决PHP中的Cannot modify header information 问题
Aug 12 #PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 #PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 #PHP
You might like
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
JS模板实现方法
2013/04/03 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
2017/12/12 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
Python request操作步骤及代码实例
2020/04/13 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
Topman美国官网:英国著名的国际平价时尚男装品牌
2017/12/22 全球购物
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
地质灾害防治方案
2014/05/14 职场文书
电子商务求职信
2014/06/15 职场文书
新闻传播专业求职信
2014/07/22 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书