首页 后端开发 php教程 二十四桥明月夜24

二十四桥明月夜24

Jul 29, 2016 am 09:16 AM
gt image int rand

  验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码。

  好吧,其实是没有事情干,但是又不想浪费时间,所以学习了下php实现验证码。正所谓,技多不压身。而且,也可以封装成一个函数,以后使用的时候也是很方便的,当然现在未封装。

  现在来说说简单的纯数字验证码吧。

    如果是初学者,建议按照我代码的注释 //数字  一步步来。最简单的方法,还是把整个代码复制走了。

    新建一个captcha.php:

<span>php
    </span><span>//</span><span>10>设置session,必须处于脚本最顶部</span><span>session_start</span><span>();

    </span><span>$image</span> = imagecreatetruecolor(100, 30);        <span>//</span><span>1>设置验证码图片大小的函数
    //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue);</span><span>$bgcolor</span> = imagecolorallocate(<span>$image</span>,255,255,255); <span>//</span><span>#ffffff
    //6>区域填充 int imagefill(int im, int x, int y, int col)  (x,y) 所在的区域着色,col 表示欲涂上的颜色</span>    imagefill(<span>$image</span>, 0, 0, <span>$bgcolor</span><span>);
    </span><span>//</span><span>10>设置变量</span><span>$captcha_code</span> = ""<span>;
    </span><span>//</span><span>7>生成随机数字</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置字体大小</span><span>$fontsize</span> = 6<span>;        
        </span><span>//</span><span>设置字体颜色,随机颜色</span><span>$fontcolor</span> = imagecolorallocate(<span>$image</span>, <span>rand</span>(0,120),<span>rand</span>(0,120), <span>rand</span>(0,120));            <span>//</span><span>0-120深颜色
        //设置数字</span><span>$fontcontent</span> = <span>rand</span>(0,9<span>);
        </span><span>//</span><span>10>.=连续定义变量</span><span>$captcha_code</span> .= <span>$fontcontent</span><span>;    
        </span><span>//</span><span>设置坐标</span><span>$x</span> = (<span>$i</span>*100/4)+<span>rand</span>(5,10<span>);
        </span><span>$y</span> = <span>rand</span>(5,10<span>);

        imagestring(</span><span>$image</span>,<span>$fontsize</span>,<span>$x</span>,<span>$y</span>,<span>$fontcontent</span>,<span>$fontcolor</span><span>);
    }
    </span><span>//</span><span>10>存到session</span><span>$_SESSION</span>['authcode'] = <span>$captcha_code</span><span>;
    </span><span>//</span><span>8>增加干扰元素,设置雪花点</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置点的颜色,50-200颜色比数字浅,不干扰阅读</span><span>$pointcolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(50,200), <span>rand</span>(50,200), <span>rand</span>(50,200<span>));        
        </span><span>//</span><span>imagesetpixel — 画一个单一像素</span>        imagesetpixel(<span>$image</span>, <span>rand</span>(1,99), <span>rand</span>(1,29), <span>$pointcolor</span><span>);
    }
    </span><span>//</span><span>9>增加干扰元素,设置横线</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置线的颜色</span><span>$linecolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(80,220), <span>rand</span>(80,220),<span>rand</span>(80,220<span>));
        </span><span>//</span><span>设置线,两点一线</span>        imageline(<span>$image</span>,<span>rand</span>(1,99), <span>rand</span>(1,29),<span>rand</span>(1,99), <span>rand</span>(1,29),<span>$linecolor</span><span>);
    }

    </span><span>//</span><span>2>设置头部,image/png</span><span>header</span>('Content-Type: image/png'<span>);
    </span><span>//</span><span>3>imagepng() 建立png图形函数</span>    imagepng(<span>$image</span><span>);
    </span><span>//</span><span>4>imagedestroy() 结束图形函数  销毁$image</span>    imagedestroy(<span>$image</span>);
登录后复制

  接着就是静态页的代码了:index.html

<span><span>doctype html</span><span>></span><span><span>html</span><span>></span><span><span>head</span><span>></span><span><span>meta </span><span>http-equiv</span><span>="Content-Type"</span><span> content</span><span>="text/html; charset=UTF-8"</span><span>></span><span><span>title</span><span>></span>确认验证码<span></span><span>title</span><span>></span><span></span><span>head</span><span>></span><span><span>body</span><span>></span><span><span>form </span><span>method</span><span>="post"</span><span> action</span><span>="./form.php"</span><span>></span><span><span>p</span><span>></span>验证码: <span><span>img </span><span>id</span><span>="captcha_img"</span><span> border</span><span>='1' </span><span>src</span><span>='./captcha.php?r=<?php </span><span>echo rand(); ?</span><span>></span><span>' />
                </span><span><span>a </span><span>href</span><span>="javascript:void(0)"</span><span> onclick</span><span>="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()"</span><span>></span>换一个?<span></span><span>a</span><span>></span><span></span><span>p</span><span>></span><span><span>P</span><span>></span>请输入验证码:<span><span>input </span><span>type</span><span>="text"</span><span> name</span><span>='authcode' </span><span>value</span><span>=''</span><span>/></span><span>p</span><span>></span><span><span>p</span><span>><span>input </span><span>type</span><span>='submit' </span><span>value</span><span>='提交' </span><span>style</span><span>='padding:6px </span><span>5px;'</span><span>/></span><span>p</span><span>></span><span></span><span>body</span><span>></span><span></span><span>html</span><span>></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
登录后复制

  从index.html可以看到,提交的表单是到form.php的,所以还要有一个判断的form.php代码:

<span>php
    </span><span>header</span>("Content-Type:text/html;charset=utf-8");            <span>//</span><span>设置头部信息
    //isset()检测变量是否设置</span><span>if</span>(<span>isset</span>(<span>$_REQUEST</span>['authcode'<span>])){
        </span><span>session_start</span><span>();
        </span><span>//</span><span>strtolower()小写函数</span><span>if</span>(<span>strtolower</span>(<span>$_REQUEST</span>['authcode'])== <span>$_SESSION</span>['authcode'<span>]){
            </span><span>//</span><span>跳转页面</span><span>echo</span> "<script language='\"javascript\"'>"<span>;
            <span>echo "document.location=\"./form.php\""<span>;
            <span>echo "</script>"<span>;
        }</span><span>else</span><span>{
            </span><span>//</span><span>提示以及跳转页面</span><span>echo</span> "<script language='\"javascript\"'>"<span>;
            <span>echo "alert('输入错误!');"<span>;
            <span>echo "document.location=\"./form.php\""<span>;
            <span>echo "</script>"<span>;
        }
        </span><span>exit</span><span>();
    }</span>
登录后复制

  显示页面如下:

  那么,纯数字的实现了,数字加英文的也应该不难了。要修改的代码   只是在 captcha.php//7>生成随机数字 修改成  //7>生成随机的字母和数字,如果你真的很可爱的就修改这几个字就认为可以实现的话,那么祝贺你,你永远保持快乐。脑残儿童欢乐多。

  废话不多说了,拉代码吧。

<span>php
    </span><span>//</span><span>10>设置session,必须处于脚本最顶部</span><span>session_start</span><span>();

    </span><span>$image</span> = imagecreatetruecolor(100, 30);        <span>//</span><span>1>设置验证码图片大小的函数
    //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue);</span><span>$bgcolor</span> = imagecolorallocate(<span>$image</span>,255,255,255); <span>//</span><span>#ffffff
    //6>区域填充 int imagefill(int im, int x, int y, int col)  (x,y) 所在的区域着色,col 表示欲涂上的颜色</span>    imagefill(<span>$image</span>, 0, 0, <span>$bgcolor</span><span>);
    </span><span>//</span><span>10>设置变量</span><span>$captcha_code</span> = ""<span>;
    </span><span>//</span><span>7>生成随机的字母和数字</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置字体大小</span><span>$fontsize</span> = 8<span>;        
        </span><span>//</span><span>设置字体颜色,随机颜色</span><span>$fontcolor</span> = imagecolorallocate(<span>$image</span>, <span>rand</span>(0,120),<span>rand</span>(0,120), <span>rand</span>(0,120));            <span>//</span><span>0-120深颜色
        //设置需要随机取的值,去掉容易出错的值如0和o</span><span>$data</span> ='abcdefghigkmnpqrstuvwxy3456789'<span>;
        </span><span>//</span><span>取出值,字符串截取方法   strlen获取字符串长度</span><span>$fontcontent</span> = <span>substr</span>(<span>$data</span>, <span>rand</span>(0,<span>strlen</span>(<span>$data</span>)),1<span>);
        </span><span>//</span><span>10>.=连续定义变量</span><span>$captcha_code</span> .= <span>$fontcontent</span><span>;        
        </span><span>//</span><span>设置坐标</span><span>$x</span> = (<span>$i</span>*100/4)+<span>rand</span>(5,10<span>);
        </span><span>$y</span> = <span>rand</span>(5,10<span>);

        imagestring(</span><span>$image</span>,<span>$fontsize</span>,<span>$x</span>,<span>$y</span>,<span>$fontcontent</span>,<span>$fontcolor</span><span>);
    }
    </span><span>//</span><span>10>存到session</span><span>$_SESSION</span>['authcode'] = <span>$captcha_code</span><span>;
    </span><span>//</span><span>8>增加干扰元素,设置雪花点</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置点的颜色,50-200颜色比数字浅,不干扰阅读</span><span>$pointcolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(50,200), <span>rand</span>(50,200), <span>rand</span>(50,200<span>));        
        </span><span>//</span><span>imagesetpixel — 画一个单一像素</span>        imagesetpixel(<span>$image</span>, <span>rand</span>(1,99), <span>rand</span>(1,29), <span>$pointcolor</span><span>);
    }
    </span><span>//</span><span>9>增加干扰元素,设置横线</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置线的颜色</span><span>$linecolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(80,220), <span>rand</span>(80,220),<span>rand</span>(80,220<span>));
        </span><span>//</span><span>设置线,两点一线</span>        imageline(<span>$image</span>,<span>rand</span>(1,99), <span>rand</span>(1,29),<span>rand</span>(1,99), <span>rand</span>(1,29),<span>$linecolor</span><span>);
    }

    </span><span>//</span><span>2>设置头部,image/png</span><span>header</span>('Content-Type: image/png'<span>);
    </span><span>//</span><span>3>imagepng() 建立png图形函数</span>    imagepng(<span>$image</span><span>);
    </span><span>//</span><span>4>imagedestroy() 结束图形函数  销毁$image</span>    imagedestroy(<span>$image</span>);
登录后复制

  其他的两个页面,不许要修改。

  一般而言,现在就已经够用了。但是就像动漫一样,总会有番外。

  那么,我们来个汉字的番外吧。其实我也准备将汉字的验证码放到我的毕业设计里面,虽然现在很流行滑动验证码,但是本人毕竟不是专门学习js的。

  而且,还可以和答辩的老师说,我们验证码不需要素材,连图片也是生成的,用自己的知识装13,也没有设么的。

<span>php
    </span><span>//</span><span>11>设置session,必须处于脚本最顶部</span><span>session_start</span><span>();

    </span><span>//</span><span>1>设置验证码图片大小的函数</span><span>$image</span> = imagecreatetruecolor(200, 60<span>);        
    </span><span>//</span><span>5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue);</span><span>$bgcolor</span> = imagecolorallocate(<span>$image</span>,255,255,255); <span>//</span><span>#ffffff
    //6>区域填充 int imagefill(int im, int x, int y, int col)  (x,y) 所在的区域着色,col 表示欲涂上的颜色</span>    imagefill(<span>$image</span>, 0, 0, <span>$bgcolor</span><span>);
    </span><span>//</span><span>7>设置ttf字体</span><span>$fontface</span> = 'FZYTK.TTF'<span>;
    </span><span>//</span><span>7>设置字库,实现简单的数字储备</span><span>$str</span>='天地不仁以万物为刍狗圣人不仁以百姓为刍狗这句经常出现在控诉暴君暴政上地残暴不仁把万物都当成低贱的猪狗来看待而那些高高在上的所谓圣人们也没两样还不是把我们老百姓也当成猪狗不如的东西但实在正取的解读是地不情感用事对万物一视同仁圣人不情感用事对百姓一视同仁执子之手与子偕老当男女主人公含情脉脉看着对方说了句执子之手与子偕老女方泪眼朦胧含羞地回一句讨厌啦这样的情节我们是不是见过很多但是我们来看看这句的原句死生契阔与子成说执子之手与子偕老于嗟阔兮不我活兮于嗟洵兮不我信兮意思是说战士之间的约定说要一起死现在和我约定的人都走了我怎么活啊赤裸裸的兄弟江湖战友友谊啊形容好基友的基情比男女之间的爱情要合适很多吧'<span>;
    </span><span>//</span><span>str_split()切割字符串为一个数组,一个中文在utf_8为3个字符</span><span>$strdb</span> = <span>str_split</span>(<span>$str</span>,3<span>);    
    </span><span>//</span><span>>11</span><span>$captcha_code</span> = ''<span>;
    </span><span>//</span><span>8>生成随机的汉子</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置字体颜色,随机颜色</span><span>$fontcolor</span> = imagecolorallocate(<span>$image</span>, <span>rand</span>(0,120),<span>rand</span>(0,120), <span>rand</span>(0,120));            <span>//</span><span>0-120深颜色
        //随机选取中文</span><span>$in</span> = <span>rand</span>(0,<span>count</span>(<span>$strdb</span><span>));
        </span><span>$cn</span> = <span>$strdb</span>[<span>$in</span><span>];
        </span><span>//</span><span>将中文记录到将保存到session的字符串中</span><span>$captcha_code</span> .= <span>$cn</span><span>;
        </span><span>/*</span><span>imagettftext (resource $image ,float $size ,float $angle ,int $x ,int $y,int $color,
        string $fontfile ,string $text ) 幕布 ,尺寸,角度,坐标,颜色,字体路径,文本字符串
        mt_rand()生成更好的随机数,比rand()快四倍</span><span>*/</span><span>        imagettftext(</span><span>$image</span>, <span>mt_rand</span>(20,24),<span>mt_rand</span>(-60,60),(40*<span>$i</span>+20),<span>mt_rand</span>(30,35),<span>$fontcolor</span>,<span>$fontface</span>,<span>$cn</span><span>);
    }
    </span><span>//</span><span>11>存到session</span><span>$_SESSION</span>['authcode'] = <span>$captcha_code</span><span>;
    </span><span>//</span><span>9>增加干扰元素,设置点</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置点的颜色,50-200颜色比数字浅,不干扰阅读</span><span>$pointcolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(50,200), <span>rand</span>(50,200), <span>rand</span>(50,200<span>));        
        </span><span>//</span><span>imagesetpixel — 画一个单一像素</span>        imagesetpixel(<span>$image</span>, <span>rand</span>(1,199), <span>rand</span>(1,59), <span>$pointcolor</span><span>);
    }
    </span><span>//</span><span>10>增加干扰元素,设置线</span><span>for</span>(<span>$i</span>=0;<span>$i</span>$i++<span>){
        </span><span>//</span><span>设置线的颜色</span><span>$linecolor</span> = imagecolorallocate(<span>$image</span>,<span>rand</span>(80,220), <span>rand</span>(80,220),<span>rand</span>(80,220<span>));
        </span><span>//</span><span>设置线,两点一线</span>        imageline(<span>$image</span>,<span>rand</span>(1,199), <span>rand</span>(1,59),<span>rand</span>(1,199), <span>rand</span>(1,59),<span>$linecolor</span><span>);
    }

    </span><span>//</span><span>2>设置头部,image/png</span><span>header</span>('Content-Type: image/png'<span>);
    </span><span>//</span><span>3>imagepng() 建立png图形函数</span>    imagepng(<span>$image</span><span>);
    </span><span>//</span><span>4>imagedestroy() 结束图形函数  销毁$image</span>    imagedestroy(<span>$image</span>);
登录后复制

  其他的页面也是不需要修改的。

  效果图如下:

以上就介绍了二十四桥明月夜24,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

华为GT3 Pro和GT4的差异是什么? 华为GT3 Pro和GT4的差异是什么? Dec 29, 2023 pm 02:27 PM

许多用户在选择智能手表的时候都会选择的华为的品牌,其中华为GT3pro和GT4都是非常热门的选择,不少用户都很好奇华为GT3pro和GT4有什么区别,下面就就给大家介绍一下二者。华为GT3pro和GT4有什么区别一、外观GT4:46mm和41mm,材质是玻璃表镜+不锈钢机身+高分纤维后壳。GT3pro:46.6mm和42.9mm,材质是蓝宝石玻璃表镜+钛金属机身/陶瓷机身+陶瓷后壳二、健康GT4:采用最新的华为Truseen5.5+算法,结果会更加的精准。GT3pro:多了ECG心电图和血管及安

如何解决 golang 中的 “undefined: rand.Seed” 错误? 如何解决 golang 中的 “undefined: rand.Seed” 错误? Jun 25, 2023 am 08:34 AM

在使用Golang进行开发或学习过程中,我们可能会遇到undefined:rand.Seed的错误提示。这个错误通常会在需要使用随机数生成器时出现,因为在Golang中需要先设置一个随机数种子,才能使用rand包中的函数。本篇文章将介绍如何解决这种错误。1.引入math/rand包首先,我们需要在代码中引入math/rand包。在

PHP中int类型转换为字节的方法详解 PHP中int类型转换为字节的方法详解 Mar 06, 2024 pm 06:18 PM

PHP中int类型转换为字节的方法详解在PHP中,我们经常需要将整数类型(int)转换为字节(Byte)类型,比如在处理网络数据传输、文件处理或者加密算法等场景中。本文将详细介绍如何将int类型转换为字节类型,以及提供具体的代码示例。1.int类型与字节的关系在计算机领域,基本数据类型int表示整数,而字节(Byte)是计算机存储单位,通常是8位二进制数据

修复:截图工具在 Windows 11 中不起作用 修复:截图工具在 Windows 11 中不起作用 Aug 24, 2023 am 09:48 AM

为什么截图工具在Windows11上不起作用了解问题的根本原因有助于找到正确的解决方案。以下是截图工具可能无法正常工作的主要原因:对焦助手已打开:这可以防止截图工具打开。应用程序损坏:如果截图工具在启动时崩溃,则可能已损坏。过时的图形驱动程序:不兼容的驱动程序可能会干扰截图工具。来自其他应用程序的干扰:其他正在运行的应用程序可能与截图工具冲突。证书已过期:升级过程中的错误可能会导致此issu简单的解决方案这些适合大多数用户,不需要任何特殊的技术知识。1.更新窗口和Microsoft应用商店应用程

如何免费使用Bing Image Creator 如何免费使用Bing Image Creator Feb 27, 2024 am 11:04 AM

本文将介绍七种利用免费的BingImageCreator获得高质量输出的方法。BingImageCreator(现称为MicrosoftDesigner的ImageCreator)是一个出色的在线人工智能艺术生成器之一。它能根据用户的提示生成高度逼真的视觉效果。提示越具体、清晰和创意,生成的效果也会更出色。BingImageCreator在创建高质量图像方面取得了重大进展。它现在使用Dall-E3培训模式,显示出更高水平的细节和现实主义。然而,它能否始终如一地生成高清结果取决于几个因素,包括快速

C++程序将double类型的变量转换为int类型 C++程序将double类型的变量转换为int类型 Aug 25, 2023 pm 08:25 PM

在C++中,int类型的变量只能保存正整数或负整数值;它们不能保存小数值。有float和double值可用于此目的。为了存储小数点后最多七位的小数,创建了双精度数据类型。整数到双精度数据类型的转换可以由编译器自动完成(称为“隐式”转换),也可以由程序员向编译器显式请求(称为“显式”转换)。在接下来的部分中,我们将介绍各种转换方法。隐式转换编译器自动执行隐式类型转换。要实现这一点,需要两个变量——一个是浮点类型,另一个是整数类型。当我们简单地将浮点值或变量分配给整数变量时,编译器将处理所有其他事情

小米手机image怎么删除 小米手机image怎么删除 Mar 02, 2024 pm 05:34 PM

小米手机image怎么删除?在小米手机中是可以删除image,但是多数的用户不知道image如何的删除,接下来就是小编为用户带来的小米手机image删除方法教程,感兴趣的用户快来一起看看吧!小米手机image怎么删除1、首先打开小米手机中的【相册】功能;2、然后勾选不需要的图片,点击右下角的【删除】按钮;3、之后点击最顶部的【相册】进入到专区,选择【回收站】;4、接着直接点击下图所示的【清空回收站】;5、最后直接点击【永久删除】即可完成。

int32的取值范围是多少 int32的取值范围是多少 Aug 11, 2023 pm 02:53 PM

int32的取值范围是从-2的31次方到2的31次方减1,即-2147483648到2147483647。int32是有符号的整数类型,意味着它可以表示正数、负数和零,它使用1位来表示符号位,而剩余的31位用来表示数值。由于一位被用来表示符号位,所以int32的有效位数是31位。

See all articles