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实现网站插件机制的方法
Nov 10 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
php 常用算法和时间复杂度
Jul 01 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
Vue.js实现价格计算器功能
2020/03/30 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
python 6种方法实现单例模式
2020/12/15 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
js实现弹框效果
2021/03/24 Javascript
DIY手工制作经营店创业计划书
2014/02/01 职场文书
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技