/**
* 生成验证码
* @param integer $width 图片宽度
* @param integer $height 图片高度
* @param string $type 验证码类型
* @param integer $length 验证码长度
* @return string 验证码字符串
*/
function validateCode($width=100, $height=30, $type='mixed', $length=4) {
$im = imagecreatetruecolor($width, $height); // 创建画布
$white = imagecolorallocate($im, 255, 255, 255); // 分配颜色
imagefilledrectangle($im, 0, 0, $width, $height, $white); // 矩形填充
// 产生随机色
function randColor($im) {
return imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
}
switch($type) {
case 'num': // 数字型
$str = implode('', range(0, 9));
break;
case 'letter': // 字母型
$str = implode('', array_merge(range('a', 'z'), range('A', 'Z')));
break;
case 'mixed': // 混合型
$str = implode('', array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)));
break;
}
$str = substr(str_shuffle($str), 0, $length); // 截取
for ($i = 0; $i < $length; $i++) { // 每次写入一个字符
imagettftext($im, 18, mt_rand(-20, 20), $i*($width/$length), mt_rand($height-10, $height-5), randColor($im),'ariblk.ttf', $str[$i]); //ariblk.ttf字体文件可替换
}
for ($i = 0; $i < 100; $i++) { // 加入像素点
imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), randColor($im));
}
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
return $str;
}

可生成指定位数的数字型、字母型、混合型验证码。

封装PHP验证码方法的更多相关文章

  1. 总结Allegro元件封装(焊盘)制作方法[修整]

    总结Allegro元件封装(焊盘)制作方法 在Allegro系统中,建立一个零件(Symbol)之前,必须先建立零件的管脚(Pin).元件封装大体上分两种,表贴和直插.针对不同的封装,需要制作不同的P ...

  2. JS如何封装一些列方法为一个对象的操作,然后集中管理这些操作,方便修改和调用

    var Api = { ajax:{ // 添加项目 旧! add_project : function(pro_name, html, css, js,callback) { $.post(&quo ...

  3. PHP封装Excel表方法使用流程

    今天总结了一下Excel表的封装和导出使用,原理 经常使用与一些日常报表, 数据报表, 实现方法比较简单, 一次封装, 简单的方法调用,简单~ 废话不多说,直接入正题, 先说下重要的参数要记住的东西 ...

  4. javascript封装自定义滚动条方法,可自定义四个边框滚动条

    还是根据我的个人习惯封装了一个方法 setScroll({ box :父盒子DOM对象, content : 内容盒子DOM对象, scrollall : 滚动条大盒子DOM对象, scroll : ...

  5. 伪验证码(含随机验证码方法)js+css

    HTML----------------------------------------------<!DOCTYPE html><html><head><m ...

  6. 在jsp提交表单的参数封装到一个方法里

    建议去看一下孤傲苍狼写的Servlet+JSP+JavaBean开发模式(http://www.cnblogs.com/xdp-gacl/p/3902537.html), 最好把他JavaWeb学习总 ...

  7. php 创建验证码方法

    php创建验证码方法: <?php function getVerify($length=4,$sessName='verify'){ //验证码 //获取字符串 去除01ol等较难辨认字符 $ ...

  8. 几种封装javaBean的方法

    开发框架时,经常需要使用java对象(javaBean)的属性来封装程序的数据,封装javaBean的方法有很多,比如反射,内省,以及使用工具类.下面从反射开始介绍. 1.javaBean介绍: 简介 ...

  9. Python类总结-封装(私有属性,方法)

    封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...

随机推荐

  1. centos中selinux功能及常用服务配置

    SELinux: Secure Enhenced Linux 常用命令 获取selinux的当前状态: # getenforce 临时启用或禁用: # setenfoce 0|1 永久性启用,需要修改 ...

  2. wpf 自定义属性的默认值

    public int MaxSelectCount { get { return (int)GetValue(MaxSelectCountProperty); } set { SetValue(Max ...

  3. poj2155二维树状数组区间更新

    垃圾poj又交不上题了,也不知道自己写的对不对 /* 给定一个矩阵,初始化为0:两种操作 第一种把一块子矩阵里的值翻转:0->1,1->0 第二种询问某个单元的值 直接累计单元格被覆盖的次 ...

  4. mysql中delete from in子查询删除失败

    遇到一个情况,想通过表1的id找到表2,删除表2中barcode关联的库存数据,然后一直不能失败,如下: delete from 库存表 where BARCODE in( select BARCOD ...

  5. STL算法之函数copy

    STL算法之copy copy(beg, end, dest) #include <iostream> #include <algorithm> #include <ve ...

  6. 【C++ Primer 第13章】3. 交换操作

    交换操作 class HasPtr { friend void swap(HasPtr &rhs, HasPtr &yhs); //其他成员定义 }; void swap(HasPtr ...

  7. php用json_encode中文问题

    echo json_encode($arr,JSON_UNESCAPED_UNICODE); 用这个中文就不会被转码了

  8. [NOI2012]随机数生成器

    题解: 很显然是一道矩阵优化dp 然而表示我很智障地把式子一个个带入 然后就发现了为什么会有那些部分分(大概用扩欧是70吧) 注意用矩阵计算的时候要用快速乘(当然想写高精那也随便,时间无限宽裕) 代码 ...

  9. json转成java对象

    avro生成的代码里,String是CharSequence,不能通过Gson反序列化,于是有了下面的代码,ParseArray里还不完善: static <T> List<T> ...

  10. moodle3.15+,mysql完全的Unicode支持配置

    https://docs.moodle.org/dev/Releases,moodle个版本升级的主要内容和改动 在windows是mysql.ini  linux 下是mysql.cnf 因为MyS ...