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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
PHP Memcached应用实现代码
Feb 08 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
php中socket通信机制实例详解
Jan 03 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
php常用表单验证类用法实例
Jun 18 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
PHP常用的三种设计模式
Feb 17 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 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
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
印尼网上商店:Alfacart.com
2019/03/11 全球购物
小学教师节活动方案
2014/01/31 职场文书
爱与责任演讲稿
2014/05/20 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
作文评语集锦
2014/12/25 职场文书
自书遗嘱范文
2015/08/07 职场文书
修辞手法有哪些?
2019/08/29 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server