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学习之PHP运算符
Oct 09 PHP
discuz安全提问算法
Jun 06 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
PHP 导出Excel示例分享
Aug 18 PHP
php将图片保存入mysql数据库失败的解决方法
Dec 27 PHP
php中异常处理方法小结
Jan 09 PHP
php实现过滤UBB代码的类
Mar 12 PHP
PHP数组和explode函数示例总结
May 08 PHP
PHP使用Pthread实现的多线程操作实例
Nov 14 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
Aug 23 PHP
php微信公众号开发之微信企业付款给个人
Oct 04 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应用程序来获取Web服务器的状态信息
2006/10/09 PHP
十天学会php之第六天
2006/10/09 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
javascript+xml技术实现分页浏览
2008/07/27 Javascript
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
Vue scrollBehavior 滚动行为实现后退页面显示在上次浏览的位置
2019/05/27 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
Python中使用PDB库调试程序
2015/04/05 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
简单实现Python爬取网络图片
2018/04/01 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
python动态视频下载器的实现方法
2019/09/16 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
ASP.NET Core中的配置详解
2021/02/05 Python
波兰购物网站:MALL.PL
2019/05/01 全球购物
上海微创软件面试题
2012/06/14 面试题
《金孔雀轻轻跳》教学反思
2014/04/20 职场文书
财务情况说明书范文
2014/05/06 职场文书
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android