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 高手之路(二)
Oct 09 PHP
简单的PHP图片上传程序
Mar 27 PHP
php 数组的一个悲剧?
May 11 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
php接口和抽象类使用示例详解
Mar 02 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
php数组指针操作详解
Feb 14 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
thinkPHP事务操作简单案例分析
Oct 17 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
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
纯PHP代码实现支付宝批量付款
2015/12/24 PHP
Laravel中log无法写入问题的解决
2017/06/17 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
Js组件的一些写法
2010/09/10 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
简述ES6新增关键字let与var的区别
2019/08/23 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
python中MySQLdb模块用法实例
2014/11/10 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
python中的格式化输出用法总结
2016/07/28 Python
详解python中的json的基本使用方法
2016/12/21 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
Python Selenium库的基本使用教程
2021/01/04 Python
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
英语演讲稿3分钟
2014/04/29 职场文书
新教师培训方案
2014/06/08 职场文书
2014年纪委工作总结
2014/12/05 职场文书
党员个人承诺书
2015/04/27 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript