PHP实现随机数字、字母的验证码功能


Posted in PHP onAugust 01, 2018

可自定义生成验证码文字的大小、数量、干扰项等等,也可以自定义验证文字的字体。。。

废话不多说,直接上代码:

1、classgd.class.php

<?php
Class Captcha{
    private $_fontfile='';
    private $_size=36;
    private $_width=200;
    private $_height=100;
    private $_length=4;
    private $_image=null;
    private $_snow=0;
    private $_pixel=0;
    private $_line=0;
  public function __construct($config=array()){
    if(is_array($config)&&count($config)>0){
      if(isset($config['fontfile'])&&is_file($config['fontfile'])&&is_readable($config['fontfile'])){
        $this->_fontfile=$config['fontfile'];
      }else{
        return false;
      }
      if(isset($config['size'])&&$config['size']>0){
        $this->_size=(int)$config['size'];
      }
      if(isset($config['width'])&&$config['width']>0){
        $this->_width=(int)$config['width'];
      }
      if(isset($config['height'])&&$config['height']>0){
        $this->_height=(int)$config['height'];
      }
      if(isset($config['length'])&&$config['length']>0){
        $this->_length=(int)$config['length'];
      }
      if(isset($config['snow'])&&$config['snow']>0){
        $this->_snow=(int)$config['snow'];
      }
      if(isset($config['pixel'])&&$config['pixel']>0){
        $this->_pixel=(int)$config['pixel'];
      }
      if(isset($config['line'])&&$config['line']>0){
        $this->_line=(int)$config['line'];
      }
      $this->_image=imagecreatetruecolor($this->_width,$this->_height);
      return $this->_image;
     }
     else{
      return false;
    }
  }
  public function getCaptcha(){
    $white=imagecolorallocate($this->_image,255,255,255);
    imagefilledrectangle($this->_image,0,0,$this->_width,$this->_height,$white);
    $str=$this->_generateStr($this->_length);
    if(false===$str){
      return false;
    }
    $fontfile=$this->_fontfile;
    for($i=0;$i<$this->_length;$i++){
      $size=$this->_size;
      $angle=mt_rand(-30,30);
      $x=ceil($this->_width/$this->_length)*$i+mt_rand(5,10);
      $y=ceil($this->_height/1.5);
      $color=$this->_getRandColor();
      //针对中文字符截取
      //$text=mb_substr($str,$i,1,'utf-8');
      $text=$str{$i};
      imagettftext($this->_image, $size, $angle, $x, $y, $color, $fontfile, $text);
    }
    if($this->_snow){
      $this->_getSnow();
    }else{
      if($this->_pixel){
        $this->_getPixel();
      }
      if($this->_line){
        $this->_getLine();
      }
    }
    header('content-type:image/png');
    imagepng($this->_image);
    imagedestroy($this->_image);
    return strtolower($str);
  }
  private function _getSnow(){
    for($i=1;$i<=$this->_snow;$i++){
      imagestring($this->_image,mt_rand(1,5),mt_rand(0,$this->_width),mt_rand(0,$this->_height),'*',$this->_getRandColor());
    }
  }
  private function _getPixel(){
    for($i=1;$i<=$this->_pixel;$i++){
      imagesetpixel($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());
    }
  }
  private function _getLine(){
    for($i=1;$i<=$this->_line;$i++){
      imageline($this->_image,mt_rand(0,$this->_width),mt_rand(0,$this->_height),mt_rand(0,$this->_width),mt_rand(0,$this->_height),$this->_getRandColor());
    }
  }
  private function _generateStr($length=4){
    if($length<1 || $length>30){
      return false;
    }
    $chars=array(
      'a','b','c','d','e','f','g','h','k','m','n','p','x','y','z',
      'A','B','C','D','E','F','G','H','K','M','N','P','X','Y','Z',
      1,2,3,4,5,6,7,8,9
      );
    $str=join('',array_rand(array_flip($chars),$length));
    return $str;
  }
  private function _getRandColor(){
    return imagecolorallocate($this->_image,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
  }
}
?>

 2、testCaptcha.php

<?php
require_once 'classgd.class.php';
$config=array(
'fontfile'=>'fonts/simfang.ttf',  //引入字体文件
//'snow'=>50,
'pixel'=>100,
'line'=>10
  );
$captcha=new Captcha($config);
$captcha->getCaptcha();
?>

总结

以上所述是小编给大家介绍的PHP实现随机数字、字母的验证码功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php imagecreatetruecolor 创建高清和透明图片代码小结
May 15 PHP
php函数array_merge用法一例(合并同类数组)
Feb 03 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
如何让thinkphp在模型中自动完成session赋值小教程
Sep 05 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
CodeIgniter常用知识点小结
May 26 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
浅谈PHP封装CURL
Mar 06 PHP
PHP unset函数原理及使用方法解析
Aug 14 PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 #PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 #PHP
PHP常用日期加减计算方法实例小结
Jul 31 #PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 #PHP
PHP笛卡尔积实现算法示例
Jul 30 #PHP
作为PHP程序员你要知道的另外一种日志
Jul 30 #PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 #PHP
You might like
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
JS重要知识点小结
2011/11/06 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
python提取页面内url列表的方法
2015/05/25 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
医学生自荐信范文
2013/12/03 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
党支部书记先进事迹
2014/01/17 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
活动总结书
2014/05/08 职场文书
村庄环境整治方案
2014/05/15 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
python使用torch随机初始化参数
2022/03/22 Python