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 相关文章推荐
建立文件交换功能的脚本(三)
Oct 09 PHP
第十一节--重载
Nov 16 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
Apr 23 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
php截取中文字符串函数实例
Feb 23 PHP
php简单计算页面加载时间的方法
Jun 19 PHP
PHP动态生成指定大小随机图片的方法
Mar 25 PHP
PHP中串行化用法示例
Nov 16 PHP
php微信开发之关注事件
Jun 14 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
Laravel配置全局公共函数的方法步骤
May 09 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
天津市收音机工业发展史
2021/03/04 无线电
CodeIgniter框架URL路由总结
2014/09/03 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
php浏览历史记录的方法
2015/03/10 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
2016/10/08 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
js模糊查询实例分享
2016/12/26 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
flask 实现token机制的示例代码
2019/11/07 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
《跨越百年的美丽》教学反思
2014/02/11 职场文书
岗位职责风险点
2014/03/12 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书
Python机器学习之基础概述
2021/05/19 Python
redis中lua脚本使用教程
2021/11/01 Redis
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库