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 UTF8编码内的繁简转换类
Jul 20 PHP
PHP集成百度Ueditor 1.4.3
Nov 23 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
Sep 22 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
万能的php分页类
Jul 06 PHP
PHP数组内存利用率低和弱类型详细解读
Aug 10 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 PHP
Yii框架where查询用法实例分析
Oct 22 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
PHP开发文件系统实例讲解
2006/10/09 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
PHP执行zip与rar解压缩方法实现代码
2010/12/05 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
php读取csc文件并输出
2015/05/21 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
Python字符串处理之count()方法的使用
2015/05/18 Python
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
django 实现简单的插入视频
2020/04/07 Python
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
2014年三八妇女节活动方案
2014/02/28 职场文书
幼儿园开学寄语
2014/04/03 职场文书
大学课外活动总结
2014/07/09 职场文书
关于颐和园的导游词
2015/01/30 职场文书
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS