文档章节

动态验证码的制作

o
 osc_odyg6b92
发布于 2018/07/13 10:37
字数 468
阅读 16
收藏 0
php

「深度学习福利」大神带你进阶工程师,立即查看>>>

<img width="100" height="50" alt="vcode" src="./yanzhengma.php" onclick="refreshCode(this)">
<script type="text/javascript">
    function refreshCode(obj){
        //obj.src="./yanzhengma.php";
        //为适配IE浏览器的缓存遗留问题,在?后加上随机数参数
        obj.src="./yanzhengma.php?rand="+Math.random();
    }
</script>
<?php
session_start();

$width=200;
$height=100;
$style=0;//0为数字字母混合式,1为纯数字式,2为纯字母式
$length=4;//验证码长度
$fontsize=30;//验证码字体大小
$fontfile='./MSYH.TTF';//验证码字体文件(.ttf)所在的路径

//1.创建画布
$img=imagecreatetruecolor($width, $height);

//2.分配颜色
function bgcolor($img){          //背景色,浅色
    return imagecolorallocate($img,mt_rand(200,250),mt_rand(200,250),mt_rand(200,250));
}
function fontcolor($img){        //前景色,深色
    return imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
}

//3.操作图像
    //先将画布填充为背景色
imagefilledrectangle($img,0,0,$width,$height,bgcolor($img));
    //准备随机字符串
$code="";
switch ($style) {
    case 0:
        $arr=array_merge(range(0, 9),range("a", "z"),range("A", "Z"));
        $str=join("", $arr);
        $code=substr(str_shuffle($str),0,$length);
        break;
    case 1:
        $str=implode("",range(0, 9));
        $code=substr(str_shuffle($str),0,$length);
        break;
    case 2:
        $arr1=range("a", "z");
        $arr2=range("A", "Z");
        $arr=array_merge($arr1,$arr2);
        $str=join("",$arr);
        $code=substr(str_shuffle($str),0,$length);
        break;
}
    //将字符串依次写入到画布中
    /*
    *将画布分为4等分,在每个等分里面各显示一个字符;每个字符的起始x坐标+15为与各等分的左边距
    imagettftext($img,20,0,0+15,50,fontcolor($img),'./MSYH.TTF',$code{0});
    imagettftext($img,20,0,50+15,50,fontcolor($img),'./MSYH.TTF',$code{1});
    imagettftext($img,20,0,100+15,50,fontcolor($img),'./MSYH.TTF',$code{2});
    imagettftext($img,20,0,150+15,50,fontcolor($img),'./MSYH.TTF',$code{3});
    */
for ($i=0;$i<$length;$i++){
    imagettftext($img,$fontsize,mt_rand(-30,30),(($width/$length)*$i+($width/$length)/3),mt_rand(($height*2/4),($height*3/4)),fontcolor($img),$fontfile,$code{$i});
}
    //加干扰素
for ($j=0;$j<200;$j++){
    imagesetpixel($img,mt_rand(0,$width),mt_rand(0,$height),fontcolor($img));
}    
for ($j=0;$j<6;$j++){
    imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),fontcolor($img));
}

//4.通知浏览器以图像的形式展现
header("content-type:image/png");

//5.显示图像
imagepng($img);

//6.回收资源
imagedestroy($img);



//将$code的值写入session中,便于页面对照
$_SESSION['vcode']=$code;

?>

 

o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
硬实时操作系统--Raw OS

Raw-OS 起飞于2012年,Raw-OS志在制作中国人自己的最优秀硬实时操作系统。 Raw-OS 操作系统特性 内核最大关中断时间无限接近0us, s3c2440系统最大关中断时间实测0.8us。 支持idle任务级别的事...

jorya_txj
2013/03/19
6.3K
1
游戏引擎--DarkGDK

Dark游戏开发工具包是一个完整的游戏引擎技术利用最新DirectX 9.0。 微软公司制作的编游戏的链接库工具,专门配合Visual C++ 2008 Express 和 DirextX 9.0 SDK,可以编辑制作3D,2D游戏,制作...

匿名
2013/04/01
2.2K
0
CSS编译工具--Peaches

Peaches是一个基于Node的CSS编译工具,用于自动合成CSS Sprite。 Peaches 追求简单、自然的CSS书写方式! 大致的工作原理如下: 1. 我们在书写样式时,对每个需要使用背景图片的元素,进行单...

sliuqin
2013/04/12
595
0
php开源框架--CorePHP

简介: CorePHP框架是一个快速,安全,灵活的php开源框架,主要是为了简化和快速开发小型项目和开源系统二次开发而诞生。它既可以完美的支持MVC模式,又可以不受限制的支持传统编程模式。它是...

shooke
2012/12/27
2.8K
1
12306.CN 订票助手

这是一个用于辅助在12306.CN上订票的Chrome&Firefox脚本。 这是一个可以运行在遨游3、Chrome、猎豹或Firefox浏览器上的脚本扩展,可以帮助您在 12306.CN 购买火车票(或抢火车票?),反正就...

匿名
2013/01/16
9.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSPF综合实验

OSPF开放路径最短选择优先协议(IGP协议、链路状态协议) 支持大型网络,通过彼此交互hello建立邻居关系,在通过彼此交互的LSA通过SPF算法算出最优路由的到自己去往其他节点路径。 OSPF的DR、...

osc_qmxpov5s
4分钟前
0
0
vmlogin多平台·多账号·安全提速系统·稳定浏览器指纹环境

VMLogin-稳定浏览器指纹环境,Cookie隔离,稳定,更高效,更智能的多账号管,从超级浏览器开始,让你的跨境之旅更便捷! VMLogin生成多个唯一指纹浏览器,每个指纹浏览器都是相互隔离的。 可以...

VMlogin中文版防关联浏览器
4分钟前
0
0
Buurst SoftNAS操作手册—Part1 如何在AWS上部署SoftNAS

前言 Buurst SoftNAS为企业提供高性能、易管理、高可用、极具经济效益的存储服务,无论是在私有云还是公有云环境下均可实现一键部署。Buurst SoftNAS可为企业提供软件定义NAS文件管理器并提供...

osc_cyo5y1ey
5分钟前
0
0
《闲扯Redis十》Redis 跳跃表的结构实现

一、前言 Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。 原文解析:h...

大道七哥
5分钟前
0
0
BGP综合实验

BGP边界网关协议 BGP是目前使用的唯一的自治系统间的路由协议,它是一种矢量路由协议,基于TCP的179号端口,它采用单播增量更新的方式更新路由,与其他的路由协议不同的是,BGP只要TCP可达,...

osc_tybx1rlt
6分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部