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在Web开发领域的优势
Oct 09 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
PHP按行读取文件时删除换行符的3种方法
May 04 PHP
destoon官方标签大全
Jun 20 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
PHP实现删除字符串中任何字符的函数
Aug 11 PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 PHP
php cookie 详解使用实例
Nov 03 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
Dec 10 PHP
PHP函数积累总结
Mar 19 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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循环获取GET和POST值的代码
2008/04/09 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
关于JS字符串函数String.replace()
2013/04/07 Javascript
javascript给span标签赋值的方法
2015/11/26 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
详解vue 命名视图
2019/08/14 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
python实现给字典添加条目的方法
2014/09/25 Python
python使用fcntl模块实现程序加锁功能示例
2017/06/23 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
Python使用Pandas库实现MySQL数据库的读写
2019/07/06 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
python轮询机制控制led实例
2020/05/03 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
业务部门经理岗位职责
2014/02/23 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python