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文本数据库的搜索方法
Oct 09 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
PHP递归调用的小技巧讲解
Feb 19 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
PHP SOCKET编程详解
May 22 PHP
php htmlentities()函数的定义和用法
May 13 PHP
Zend Framework路由器用法实例详解
Dec 11 PHP
PHP设计模式之单例模式定义与用法分析
Mar 26 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
laravel框架select2多选插件初始化默认选中项操作示例
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
PHP计数器的实现代码
2013/06/08 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
2015/12/08 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
js Event对象的5种坐标
2011/09/12 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
Vue常见面试题整理【值得收藏】
2018/09/20 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
Python中转换角度为弧度的radians()方法
2015/05/18 Python
Python3字符串学习教程
2015/08/20 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
python 自动批量打开网页的示例
2019/02/21 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
python与mysql数据库交互的实现
2020/01/06 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
《挑山工》的教学反思
2014/02/16 职场文书
小学运动会报道稿
2014/10/04 职场文书
交通事故一次性赔偿协议书范本
2014/11/02 职场文书
老乡会致辞
2015/07/28 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
Win11安装受阻怎么办? Windows11安装问题与解决方案汇总
2021/11/21 数码科技
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android