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和js交互一例-PHP教程,PHP应用
Jan 03 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
linux中cd命令使用详解
Jan 08 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
php实现留言板功能(会话控制)
May 23 PHP
PHP中PDO事务处理操作示例
May 02 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 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 代码优化的42条建议 推荐
2009/09/25 PHP
PHP多态代码实例
2015/06/26 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
JQuery 学习笔记 选择器之三
2009/07/23 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
javascript中UMD规范的代码推演
2018/08/29 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Python实现的数据结构与算法之队列详解
2015/04/22 Python
python连接mysql实例分享
2016/10/09 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
深入浅析Python的类
2018/06/22 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
python和php哪个容易学
2020/06/19 Python
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
女娲补天教学反思
2014/02/05 职场文书
社区志愿者培训方案
2014/06/10 职场文书
人力资源职位说明书
2014/07/29 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
党员自我评价2015
2015/03/03 职场文书
高二语文教学反思
2016/02/16 职场文书
Python中的程序流程控制语句
2022/02/24 Python
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技