php实现生成验证码实例分享


Posted in PHP onApril 10, 2016

image.func.php

<?php 
require_once('string.func.php');
 
 function verifyImage( $type=1,$length=4,$pixel=0,$line=0,$sess_name="verify"){ 
 
  session_start();
  /*定义长度和宽度*/
$width=80;
$height=30;
/* 创建画布*/
$image=imagecreatetruecolor($width, $height);
 
/*本函数用来匹配图形的颜色,供其它绘图函数使用。参数 image 表示图形的 handle。参数 red、green、blue 是色彩三原色,其值从 0 至 255....我在此定义黑色和白色*/
$white=imagecolorallocate($image, 255, 255, 255);
$black=imagecolorallocate($image,0,0,0);
 
/*本函数将图片的封闭长方形区域着色。参数 x1、y1 及 x2、y2 分别为矩形对角线的坐标。参数 col 表示欲涂上的颜色*/
imagefilledrectangle($image, 1, 1, $width-2, $height-2, $white);
 
/*buildRandomString函数用来生成一个验证码*/
$chars=buildRandomString($type,$length);
 
/*将验证码给session以便用来判断用户输入是否正确*/
$_SESSION[$sess_name]=$chars;
 
/*定义字体库*/
$fontfiles=array('msyh.ttf','msyhbd.ttf','simsun.ttc','SIMYOU.TTF','STHUPO.TTF','STKAITI.TTF','STLITI.TTF');
 
 
/*用循环来将验证码一个一个的写入图片中*/
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);
 
  $color=imagecolorallocate($image,mt_rand(50,190),mt_rand(50,200),mt_rand(50,90));
  $fontfile="../font/".$fontfiles[mt_rand(0,count($fontfiles)-1)];
  $text=substr($chars,$i,1);
 
  /*本函数将 TTF (TrueType Fonts) 字型文字写入图片*/
 imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
}
if($pixel)
{
for($i=0;$i<50;$i++)
{
  /*本函数可在图片上绘出一点。参数 x、y 为欲绘点的坐标,参数 col 表示该点的颜色*/
  imagesetpixel($image, mt_rand(0,$width-1), mt_rand(0,$height-1), $black);
}}
if($line)
{
  for($i=0;$i<10;$i++)
  {
  $color=imagecolorallocate($image,mt_rand(50,90),mt_rand(50,200),mt_rand(50,90));
  /*画线段*/
  imageline($image, mt_rand(0,$width-1), mt_rand(0,$height-1), mt_rand(0,$width-1), mt_rand(0,$height-1), $color);
}
}
/*以gif形式输出*/
header("content-type:image/gif");
/*建立GIF图 并输出到网页*/
imagegif($image);
/*释放与 image 关联的内存*/
imagedestroy($image);
}

string.func.php

<?php 
 
function buildRandomString($type=1,$length=4){
 
if($type==1)
{
  /*join函数把数组转换为字符串。。join() 函数是 implode() 函数的别名*/
  $chars=join("",range(0,9));
}elseif ($type==2) {
  /*array_merge函数合并数组*/
  $chars=join("",array_merge(range("a","z"),range("A","Z")));
}elseif($type==3)
{
  $chars=join("",array_merge(range("a","z"),range("A","Z"),range(0,9)));
}
 
if($length>strlen($chars))
{
  exit("字符串长度不够");
}
/*打乱字符串*/
$chars=str_shuffle($chars);
return substr($chars,0,$length);
 
}
 ?>
PHP 相关文章推荐
php 动态添加记录
Mar 10 PHP
php 一元分词算法
Nov 30 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
Zend Guard使用指南及问题处理
Jan 07 PHP
php从给定url获取文件扩展名的方法
Mar 14 PHP
php实现微信公众号无限群发
Oct 11 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
PHPCMS V9 添加二级导航的思路详解
Oct 20 PHP
PHP实现二维数组中的查找算法小结
Jun 09 PHP
php写入文件不覆盖的实例讲解
Sep 17 PHP
PHP实现简单实用的分页类代码
Apr 08 #PHP
PHP文件上传类实例详解
Apr 08 #PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 #PHP
php生成带logo二维码方法小结
Apr 08 #PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 #PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 #PHP
初识ThinkPHP控制器
Apr 07 #PHP
You might like
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
php经典趣味算法实例代码
2020/01/21 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
澳洲在线厨具商店:Kitchen Style
2018/05/05 全球购物
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
struct与class的区别
2014/02/03 面试题
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
医学求职信
2014/05/28 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
Python实现批量自动整理文件
2022/03/16 Python
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers