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 相关文章推荐
Google Voice 短信发送接口PHP开源版(2010.5更新)
Jul 22 PHP
php debug 安装技巧
Apr 30 PHP
php的urlencode()URL编码函数浅析
Aug 09 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 PHP
PHP中图片等比缩放的实例
Mar 24 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
如何利用PHP执行.SQL文件
Jul 05 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
用PHP代码给图片加水印
Jul 01 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 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
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
tagName的使用,留一笔
2006/06/26 Javascript
JS option location 页面跳转实现代码
2008/12/27 Javascript
JavaScript入门教程(1) 什么是JS
2009/01/31 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
python数据结构之图的实现方法
2015/07/08 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
Python之pymysql的使用小结
2019/07/01 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
什么是反射?如何实现反射?
2016/07/25 面试题
副总经理任命书
2014/06/05 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
催款函范文
2015/06/24 职场文书
酒吧七夕情人节宣传语
2015/11/24 职场文书