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 11 PHP
php开发工具之vs2005图解
Jan 12 PHP
php程序之die调试法 快速解决错误
Sep 17 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
PHP函数import_request_variables()用法分析
Apr 02 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
Yii2数据库操作常用方法小结
May 04 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
PHP大文件及断点续传下载实现代码
Aug 18 PHP
PHP操作Redis常用命令的实例详解
Dec 23 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 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
如何打开php的gd2库
2017/02/09 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
JS动态调用方法名示例介绍
2013/12/18 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
jquery实现倒计时代码分享
2014/06/13 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
javascript设计模式之装饰者模式
2020/01/30 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
2020/04/20 Javascript
Python提取网页中超链接的方法
2016/09/18 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
python小白切忌乱用表达式
2020/05/29 Python
html5 分层屏幕适配的方法
2018/03/16 HTML / CSS
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
父亲八十大寿答谢词
2014/01/23 职场文书
安全协议书范本
2014/04/21 职场文书
我的理想演讲稿
2014/04/30 职场文书
节约用水的口号
2014/06/20 职场文书
欢迎新生标语
2014/10/06 职场文书
诚信承诺书
2015/01/19 职场文书
聘任通知书
2015/09/21 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
详解Python flask的前后端交互
2022/03/31 Python
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android