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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP JSON 数据解析代码
May 26 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
destoon文章模块调用企业会员资料的方法
Aug 22 PHP
php站内搜索关键词变亮的实现方法
Dec 30 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
实例讲解PHP页面静态化
Feb 05 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 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写的获取各搜索蜘蛛爬行记录代码
2012/08/21 PHP
PHP5全版本绕过open_basedir读文件脚本漏洞详细介绍
2015/01/20 PHP
浅析php如何实现App常用的秒发功能
2016/08/03 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
理解Python中的With语句
2015/02/02 Python
Python开发常用的一些开源Package分享
2015/02/14 Python
python自动翻译实现方法
2016/05/28 Python
python 简单的多线程链接实现代码
2016/08/28 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
银行存款证明样本
2014/01/17 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
绩效工资实施方案
2014/03/15 职场文书
员工辞职信范文
2015/03/02 职场文书
公司文体活动总结
2015/05/07 职场文书
2016年119消防宣传日活动总结
2016/04/05 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android