PHP中仿制 ecshop验证码实例


Posted in PHP onJanuary 06, 2017

仿制ecshop验证码的代码如下所示:

<?php
//仿制ecshop验证码(四位大写字母和数字、背景)
//处理码值(四位大写字母和数字组成)
//所有的可能的字符集合
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$chars_len = strlen($chars); //集合长度
//随机选取
$code_len = 4;//验证码长度
$code=''; //验证码值初始化
for($i=0;$i<$code_len;++$i){
  //随机取得一个字符下标
  $rand_index = mt_rand(0,$chars_len-1);
  //利用字符串的下标操做,获得选择的字符
  $code .= $chars[$rand_index];
}
//echo $code;
//存储于session中(用于校验)
session_start();
$_SESSION['code'] = $code;

//验证码图像(已知的背景图片)
//处理背景
$bg_file= './captcha/captcha_bg' . mt_rand(1,5). '.jpg';
//依据该图片,创建画布
$image = imagecreatefromjpeg($bg_file);
//简单的将字符串写在画布上的函数(imageString();)
//imageString(画布,字体,位置X, 位置y,字符串内容,颜色); 
//字体:imagestring函数,使用的内置字体。由1-5表示。位置由字符串左上角的坐标决定。颜色也是需要预先分配好的。imagecolorallocate();

//分配字体颜色(随机分配黑色或者白色)
if(mt_rand(0,1)==1){
    $str_color = imagecolorallocate($image,0,0,0); //黑色
  }else{
    $str_color = imagecolorallocate($image,255,0xff,255);//白色
}
//内置5号字体
$font = 5;
//位置
//画布大小
$image_w = imagesx($image);
$image_h = imagesy($image);
//获得字体的宽和高
$font_w = imagefontwidth($font);
$font_h = imagefontheight($font);
//获得字符串的宽高
$str_w = $font_w * $code_len;
$str_h = $font_h;
//计算位置
$str_x = ($image_w-$str_w) / 2;
$str_y = ($image_h-$str_h) / 2;
//字符串
imagestring($image,$font,$str_x,$str_y,$code,$str_color);
//输出和销毁画布
header("content-type:image/jpeg");
imagejpeg($image);
imagedestroy($image);

封装验证码工具类:

//验证码工具类(将所有和验证码操作相关的全部封装到该类中)
    class Captcha{
      /*生成验证码*/
    public function makeImage($code_len=4){
    //仿制ecshop验证码(四位大写字母和数字、背景)
    //处理码值(四位大写字母和数字组成)
    //所有的可能的字符集合
    $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    $chars_len = strlen($chars); //集合长度
    //随机选取
    $code=''; //验证码值初始化
    for($i=0;$i<$code_len;++$i){
      //随机取得一个字符下标
      $rand_index = mt_rand(0,$chars_len-1);
      //利用字符串的下标操做,获得选择的字符
      $code .= $chars[$rand_index];
    }
    //echo $code;
    //存储于session中(用于校验)
    @session_start();
    $_SESSION['code'] = $code;
    //验证码图像(已知的背景图片)
    //处理背景
    $bg_file= TOOL . './captcha/captcha_bg' . mt_rand(1,5). '.jpg';
    //依据该图片,创建画布
    $image = imagecreatefromjpeg($bg_file);
    //简单的将字符串写在画布上的函数(imageString();)
    //imageString(画布,字体,位置X, 位置y,字符串内容,颜色); 
    //字体:imagestring函数,使用的内置字体。由1-5表示。位置由字符串左上角的坐标决定。颜色也是需要预先分配好的。imagecolorallocate();
    //分配字体颜色(随机分配黑色或者白色)
    if(mt_rand(0,1)==1){
        $str_color = imagecolorallocate($image,0,0,0); //黑色
      }else{
        $str_color = imagecolorallocate($image,255,0xff,255);//白色
    }
    //内置5号字体
    $font = 5;
    //位置
    //画布大小
    $image_w = imagesx($image);
    $image_h = imagesy($image);
    //获得字体的宽和高
    $font_w = imagefontwidth($font);
    $font_h = imagefontheight($font);
    //获得字符串的宽高
    $str_w = $font_w * $code_len;
    $str_h = $font_h;
    //计算位置
    $str_x = ($image_w-$str_w) / 2;
    $str_y = ($image_h-$str_h) / 2;
    //字符串
    imagestring($image,$font,$str_x,$str_y,$code,$str_color);
    //输出和销毁画布
    header("content-type:image/jpeg");
    imagejpeg($image);
    imagedestroy($image);
  }
}

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

PHP 相关文章推荐
php下拉选项的批量操作的实现代码
Oct 14 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
php对称加密算法示例
May 07 PHP
用 Composer构建自己的 PHP 框架之基础准备
Oct 30 PHP
浅析php创建者模式
Nov 25 PHP
ThinkPHP的SAE开发相关注意事项详解
Oct 09 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 PHP
php在linux环境中如何使用redis详解
Dec 15 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 #PHP
基于thinkPHP类的插入数据库操作功能示例
Jan 06 #PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 #PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 #PHP
php中简单的对称加密算法实现
Jan 05 #PHP
WAF的正确bypass
Jan 05 #PHP
phpcms的分类名称和类别名称的调用
Jan 05 #PHP
You might like
PHP学习笔记之二
2011/01/17 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
2011/08/18 PHP
选择PHP作为网站开发语言的原因分享
2012/01/03 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHP加密解密类实例分析
2015/04/20 PHP
浅谈PHP中的
2016/04/23 PHP
php英文单词统计器
2016/06/23 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
页面版文本框智能提示JS代码
2009/11/20 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
详解python的数字类型变量与其方法
2016/11/20 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
解决python文件双击运行秒退的问题
2019/06/24 Python
Python3实现二叉树的最大深度
2019/09/30 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
酒店人事专员岗位职责
2013/12/19 职场文书
小学生暑假家长评语
2014/04/17 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python
Python如何用re模块实现简易tokenizer
2022/05/02 Python