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 相关文章推荐
分页显示Oracle数据库记录的类之一
Oct 09 PHP
使用 php4 加速 web 传输
Oct 09 PHP
PHP 的 __FILE__ 常量
Jan 15 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
php数字运算验证码的实现代码
Jul 30 PHP
php中时间函数date及常用的时间计算
May 12 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
php类自动装载、链式操作、魔术方法实现代码
Jul 23 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
Nov 20 PHP
利用ajax+php实现商品价格计算
Mar 31 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
第一个无线电台是由谁发明的
2021/03/01 无线电
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
鼠标滚轮控制网页横向移动实现思路
2013/03/22 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
JavaScript 预解析的4种实现方法解析
2019/09/03 Javascript
Vue项目中Api的组织和返回数据处理的操作
2019/11/04 Javascript
python实现百万答题自动百度搜索答案
2018/01/16 Python
wxPython的安装与使用教程
2018/08/31 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
Python values()与itervalues()的用法详解
2019/11/27 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
小学教师岗位职责
2013/11/25 职场文书
个人担保书格式范文
2014/05/12 职场文书
推广活动策划方案
2014/08/23 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
golang switch语句的灵活写法介绍
2021/05/06 Golang
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
深入理解go缓存库freecache的使用
2022/02/15 Golang
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python