首先,在项目目录下创建Class文件夹,用于存储个人类文件。

之后建立Data目录存放所需字体文件,其他的数据也可以放在这个文件夹下。

然后再Conf文件夹下创建verify.php配置文件。

在config.php文件中引用verify.php配置文件。

代码入下:

//加载验证码配置
    'LOAD_EXT_CONFIG' => 'verify',

要使用Class文件夹下的类,要这么引用:

//引入自定义验证码类
        import('Class.ValidateCode', APP_PATH);
        ValidateCode::doVerify();

效果:

使用的验证码类,以及配置文件:

配置文件:

  1. <?php
  2. return array(
  3. //验证配置
  4. 'charset' => 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789',//随机因子
  5. 'codelen' => 4, //验证码长度
  6. 'width' => 130, //宽度
  7. 'height' => 50, //高度
  8. 'font' => './App/Data/QDB.otf', //指定的字体
  9. 'fontsize' => 30, //指定字体大小
  10. 'verifyName' => 'verify', //session中验证码键值
  11. );

验证码类:

  1. <?php
  2. //验证码类
  3. class ValidateCode {
  4.  
  5. /**
  6. * 生成验证码
  7. * @return [type] [description]
  8. */
  9. static function doVerify() {
  10. //属性
  11. $img;
  12. $charset = C('charset');//随机因子
  13. $codelen = C('codelen');//验证码长度
  14. $width = C('width');//宽度
  15. $height = C('height');//高度
  16. $font = C('font');//指定的字体
  17. $fontsize = C('fontsize');//指定字体大小
  18. $verifyName = C('verifyName');//session中验证码键值
  19.  
  20. //生成随机码
  21. $_len = strlen($charset)-1;
  22. for ($i=0;$i<$codelen;$i++) {
  23. $code .= $charset[mt_rand(0,$_len)];
  24. }
  25.  
  26. //生成背景
  27. $img = imagecreatetruecolor($width, $height);
  28. $color = imagecolorallocate($img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
  29. imagefilledrectangle($img,0,$height,$width,0,$color);
  30.  
  31. //生成文字
  32. $_x = $width / $codelen;
  33. for ($i=0;$i<$codelen;$i++) {
  34. $fontcolor = imagecolorallocate($img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
  35. imagettftext($img,$fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$height / 1.4,$fontcolor,$font,$code[$i]);
  36. }
  37.  
  38. //生成线条、雪花
  39. //线条
  40. for ($i=0;$i<6;$i++) {
  41. $linecolor = imagecolorallocate($img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
  42. imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$linecolor);
  43. }
  44. //雪花
  45. for ($i=0;$i<30;$i++) {
  46. $snowcolor = imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
  47. imagestring($img,mt_rand(1,5),mt_rand(0,$width),mt_rand(0,$height),'.',$snowcolor);
  48. }
  49.  
  50. //创建session
  51. //生成小写验证码进行md5加密,并存于session
  52. $_SESSION[$verifyName] = md5(strtolower($code));
  53.  
  54. //输出
  55. header('Content-type:image/png');
  56. imagepng($img);
  57. imagedestroy($img);
  58. }
  59. }

ThinkPHP - 扩展个人类库 - 以验证码类为例子的更多相关文章

  1. Yii 1.1.17 四、属性标签、AR类增删改查、使用上传类与扩展第三方类库

    一.属性标签与规则设置 当进入网站页面,将会读数据库返回信息到视图上.那么,现在定义模型中的属性在视图标签上的显示, 也就是模型属性到前台标签的映射 // 定义模型属性到前台标签的映射 public ...

  2. THINKPHP源码学习--------验证码类

    TP3.2验证码类的理解 今天在学习中用到了THINKPHP验证码,为了了解究竟,就开始阅读TP验证码的源码. 源码位置:./ThinkPHP/Library/Think/Verify.class.p ...

  3. ThinkPHP 3.2.3 加减乘法验证码类

    ThinkPHP 3.2.3 自带的验证码类位于 /ThinkPHP/Library/Think/Verify.class.php,字体文件位于 /ThinkPHP/Library/Think/Ver ...

  4. ThinkPHP验证码类

    //ThinkPHP验证码类使用$config = array( 'fontSize' => 30, // 验证码字体大小 'length' => 3, // 验证码位数 'useNois ...

  5. 修改ThinkPHP的验证码类

    今天用ThinkPHP重新开发一个系统,用到了ThinkPHP的验证码类,由于我希望验证码别太复杂,希望验证码里边只有数字,却发现该Verify类并未提供设置验证码中使用的字符的配置的方法,于是查看源 ...

  6. 【个人使用.Net类库】(4)验证码类

    验证码是现在管理系统常用的一种保护用户帐户信息的一种功能. 验证码可以有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,虽然这可能是我们登录麻烦一点,但是对用户的密码安全来 ...

  7. ThinkPHP验证码类的使用

    1.创建一个方法并引入验证码类class ShowAction extends Action{//用户评论验证码public function verify(){import('ORG.Util.Im ...

  8. CI框架中,扩展验证码类。

    使用CI框架的朋友,应该都知道CI框架的的验证码辅助函数,不太好用.它需要写入到数据库中,然后再进行比对. 大家在实际项目中,好像不会这样去使用,因为会对数据库造成一定的压力. 所以,我们还是利用se ...

  9. thinkphp中的类库与引用import引入机制

    ThinkPHP的类库包括基类库和应用类库 控制器类 模块名+Action 例如 UserAction.InfoAction 模型类 模型名+Model 例如 UserModel.InfoModel ...

随机推荐

  1. 枚举与define的区别

    1.枚举enum的用途浅例      写程序时,我们常常需要为某个对象关联一组可选alternative属性.例如,学生的成绩分A,B,C,D等,天气分sunny, cloudy, rainy等等.  ...

  2. 网络编程——TCP连接

    TCP在双方传输数据前,发送方先请求建立连接,接收方同意建立连接后才能传输数据.(打电话:先拨号,等对方同意接听后,才能交流)...高可靠性 UDP不需要建立连接(发短信).不可靠,可能出现数据丢失等 ...

  3. IOS FoundationKit (NSString) 知识汇总

    1. interface 代表类声明,@implement 代表类实现,@encode 代表将object-c 中类型转换成指定字符串 2  当前char * 类型转化为字符串需要转化为NSStrin ...

  4. MVC-04 视图(1)

    不可否认的,View应该是整个ASP.NET MVC项目开发过程中最花时间的部分,因为与显示逻辑相关的技术五花八门,你可能要学习的有HTML.CSS.JavaScript.DOM.JQuery.JSO ...

  5. qt 国际化(翻译时会触发changeEvent)

    1. 修改工程文件 .pro ,加入翻译源文件 hello_world.ts: TRANSLATIONS += \        Resource/translations/hello_world.t ...

  6. Suricata, to 10Gbps and beyond(X86架构)

    Introduction Since the beginning of July 2012, OISF team is able to access to a server where one int ...

  7. Foundation Sorting: Quicksort

    /* Quick Sorting. * Implementation history:. * 2013-09-15, Mars Fu, first version. */ /* [Quicksort ...

  8. http://localhost:8080/ 演出Oracle说明

    输入http://localhost:8080,可以出现tomcat主页.并且我检查过啦,jdk.tomcat及oracle中的环境变量都设置对啦,可是安装oracle之后,再输入http://loc ...

  9. Android API 中文(76)——AdapterView.OnItemLongClickListener

    前言 本章内容是android.widget.AdapterView.OnItemLongClickListener,版本为Android 2.3 r1,翻译来自"cnmahj", ...

  10. Lamd表达式

    1. 普通绑定: public void button1_Click(object sender, EventArgs e) { MessageBox.Show("ok"); } ...