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数据库操作类代码(增,删,改,查)
Apr 08 PHP
php 模拟get_headers函数的代码示例
Apr 27 PHP
分享8个最佳的代码片段在线测试网站
Jun 29 PHP
phpmailer中文乱码问题的解决方法
Apr 22 PHP
php在linux下检测mysql同步状态的方法
Jan 15 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
PHP中的Session对象如何使用
Sep 25 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP实现的解汉诺塔问题算法示例
Aug 06 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 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 4.2书写安全的脚本
2006/10/09 PHP
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
高效率JavaScript编写技巧整理
2013/08/23 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
jquery选择checked在ie8普通模式下的问题
2014/02/12 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
小程序如何在不同设备上自适应生成海报的实现方法
2019/08/20 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
python编写Logistic逻辑回归
2020/12/30 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
什么是数组名
2012/05/10 面试题
顶碗少年教学反思
2014/02/21 职场文书
村党支部换届选举方案
2014/05/02 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
民事二审代理词
2015/05/25 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server