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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
一周学会PHP(视频)Http下载
Dec 12 PHP
php adodb连接不同数据库
Mar 19 PHP
用php将任何格式视频转为flv的代码
Sep 03 PHP
PHP 遍历文件实现代码
May 04 PHP
在PHP中使用X-SendFile头让文件下载更快
Jun 01 PHP
php递归遍历删除文件的方法
Apr 17 PHP
PHP 返回13位时间戳的实现代码
May 13 PHP
PHP仿微信发红包领红包效果
Oct 30 PHP
PHP判断一个数组是另一个数组子集的方法详解
Jul 31 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
PHP实现文字写入图片功能
Feb 18 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
图形数字验证代码
2006/10/09 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
PHP合并静态文件详解
2014/11/14 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
js常用代码段收集
2011/10/28 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
使用Angular material主题定义自己的组件库的配色体系
2019/09/04 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
什么是Python中的顺序表
2020/06/02 Python
python爬虫可以爬什么
2020/06/16 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
计算机系统管理员求职信
2014/06/20 职场文书
写景作文评语集锦
2014/12/25 职场文书
通知怎么写?
2019/04/17 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
详解NodeJS模块化
2021/06/15 NodeJs
VUE之图片Base64编码使用ElementUI组件上传
2022/04/09 Vue.js