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动态分页函数,PHP开发分页必备啦
Nov 07 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
深入分析php中接口与抽象类的区别
Jun 08 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
php array_merge函数使用需要注意的一个问题
Mar 30 PHP
php实现根据词频生成tag云的方法
Apr 17 PHP
PHP网站建设的流程与步骤分享
Sep 25 PHP
微信 getAccessToken方法详解及实例
Nov 23 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
微信接口生成带参数的二维码
Jul 31 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 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
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
javascript json 新手入门文档
2009/12/03 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
Jquery动态列功能完整实例
2019/08/30 jQuery
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
Python中的装饰器用法详解
2015/01/14 Python
python dict 相同key 合并value的实例
2019/01/21 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
大专生自我鉴定范文
2013/10/01 职场文书
应届生幼儿园求职信
2013/11/12 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
现实表现证明材料
2015/06/19 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
Java实现多文件上传功能
2021/06/30 Java/Android
Element实现动态表格的示例代码
2021/08/02 Javascript