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图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
php新建文件自动编号的思路与实现
Jun 27 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
php实现加减法验证码代码
Feb 14 PHP
ThinkPHP实现事务回滚示例代码
Jun 23 PHP
浅谈php提交form表单
Jul 01 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
Apr 01 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
php基于websocket搭建简易聊天室实践
Oct 24 PHP
PHP 芝麻信用接入的注意事项
Dec 01 PHP
PHP数据库编程之MySQL优化策略概述
Aug 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
星际中的相关伤害
2020/03/04 星际争霸
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
ASP中Sub和Function的区别说明
2020/08/30 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
js文字横向滚动特效
2015/11/11 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
python二叉树的实现实例
2013/11/21 Python
python中的代码编码格式转换问题
2015/06/10 Python
深入理解Python中装饰器的用法
2016/06/28 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
凯特王妃父母建立的派对用品网站:Party Pieces
2017/05/28 全球购物
《美丽的田园》教学反思
2014/03/01 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
机电专业毕业生求职信
2014/07/01 职场文书
2016高考感言
2015/08/01 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
mongoDB数据库索引快速入门指南
2022/03/23 MongoDB