PHP学习之验证码(2)封装验证码

1. range — 根据范围创建数组,包含指定的元素   
2. rand — 产生一个随机整数  
3. array_rand — 从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键。 array_rand( array $array[, int $num = 1] ),参数num指明了你想取出多少个单元。  
4. array_flip — 交换数组中的键和值
5. mb_substr( string $str, int $start[, int $length = NULL[, string $encoding = mb_internal_encoding()]] )

以下为一个验证码封装实例

vode.php

<?php   function getVerify($fonts=‘fonts/2.ttc‘,$type=1,$length=4,$codeName=‘verifyCode‘,$pixel=50,$line=0,$arc=0,$width=200,$height=50){   //创建一个画布//    $width=200;//    $height=50;   $image=imagecreatetruecolor($width, $height);   //为画布填充颜色   $white=imagecolorallocate($image, 255, 255, 255);   imagefilledrectangle($image, 0, 0, $width, $height, $white);   function getRandColor($image){       return imagecolorallocate($image, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));    }//    $length=4;// $type=4;    switch ($type){        case 1:            //数字            $string=join(‘‘,array_rand(range(0,9),$length));            break;        case 2:            //字母            $string=join(‘‘,array_rand(array_flip(array_merge(range(‘a‘,‘z‘),range(‘A‘,‘Z‘))),$length));            break;        case 3:            //数字加字母            $string=join(‘‘,array_rand((array_flip(array_merge(range(0,9),range(‘a‘,‘z‘),range(‘A‘,‘Z‘)))),$length));            break;        case 4:            //汉字            $str=‘看,完,苏,志,燮,今,天,的,热,搜,恋,情,估,计,很,多,迷,妹,又,要,直,呼,心,碎,不,过,也,该,替,偶,像,感,到,开,心,            毕,竟,大,叔,是,真,的,年,纪,不,小,了,同,龄,的,艺,人,很,多,都,抱,娃,了,吧‘;            $arr=explode(‘,‘,$str);            $string=join(‘‘,array_rand(array_flip($arr),$length));            break;        default:            exit(‘非法参数‘);            break;    }   //将验证码存入SESSION    session_start();    $_SESSION[$codeName]=$string;    for ($i=0;$i<$length;$i++){        $size=mt_rand(20,28);        $angle=mt_rand(-15,15);        $x=20+ceil($width/$length)*$i;        $y=mt_rand(ceil($height/3),$height-20);//        $fonts=‘fonts/2.ttc‘;        $text=mb_substr($string,$i,1,‘utf-8‘);        imagettftext($image,$size,$angle,$x,$y,getRandColor($image),$fonts,$text);    }   //添加干扰元素    //添加像素    if($pixel>0){        for($i=0;$i<50;$i++){            imagesetpixel($image,mt_rand(0,200),mt_rand(0,40),getRandColor($image));        }    }    //绘制线段当做干扰元素     if($line>0){        for ($i=0;$i<4;$i++){            imageline($image,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),getRandColor($image));        }    }    //绘制圆弧     if($arc>0){        for ($i=0;$i<5;$i++){            imagearc($image,mt_rand(0,$width/2),mt_rand(0,$height/2),mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,360),mt_rand(0,360),getRandColor($image));        }    }   //设定向浏览器输出图片类型    header(‘content-type:image/png‘);   //输出图像   imagepng($image);   //销毁资源   imagedestroy($image);}?>

reg.php
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>注册界面</title></head><body><h1>IMOOC注册界面</h1><form action="doAction.php" method="post">    <table bgcolor="#abcdef" width="80%" border="1" cellspacing="0" cellpadding="0">        <tr>            <td>用户名</td>            <td><input type="text" name="username" id="" placeholder="请输入用户名..."></td>        </tr>        <tr>            <td>密码</td>            <td><input type="password" name="password" id="" placeholder="请输入密码..."></td>        </tr>        <tr>            <td>验证码</td>            <td><input type="text" name="verify" id="" placeholder="请输入验证码...">            <img src="getVerify.php"  id=‘verifyImage‘/><a onclick="document.getElementById(‘verifyImage‘).src=‘getVerify.php?r=‘+Math.random()" href="javascript:void(0)">                    看不清,换一个                </a>            </td>        </tr>        <tr>            <td colspan="2"><input type="submit" value="注册"></td>        </tr>    </table></form></body></html>

原文地址:https://www.cnblogs.com/h-s-l/p/10891355.html

时间: 2024-10-31 07:55:02

PHP学习之验证码(2)封装验证码的相关文章

Shiro学习(22)集成验证码

在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止机器人模拟真实用户登录而恶意访问,如暴力破解用户密码/恶意评论等.目前也有一些验证码比较简单,通过一些OCR工具就可以解析出来:另外还有一些验证码比较复杂(一般通过如扭曲.加线条/噪点等干扰)防止OCR工具识别:但是在中国就是人多,机器干不了的可以交给人来完成,所以在中国就有很多打码平台,人工识别验证码:因此即使比较复杂的如填字.算数等类型的验证码还是能识别的.所以验证码也不是绝对可靠的,目前比较可靠还是手机验证码,但是对于用户

PHP算式验证码和汉字验证码的实现方法

在PHP网站开发中,验证码可以有效地保护我们的表单不被恶意提交,但是如果不使用算式验证码或者汉字验证码,仅仅使用简单的字母或者数字验证码,这样的验证码方案真的安全吗? 大家知道简单数字或者字母验证码很容易被破解,但是算式验证码或者中文汉字验证码不容易被破解,所以建议大家在使用验证码的时候,尽量用算式验证码或者中文汉字验证码. 下面是我写的两种验证码代码,有用到的朋友可以参考下: 1.算式验证码: <?php session_start(); header("Content-type: im

从12306网站新验证码看Web验证码设计与破解

2015年3月16日,铁路官方购票网站12306又出新招,在登录界面推出了全新的验证方式,用户在填写好登录名和密码之后,还要准确的选取图片验证码才能登陆成功.据悉,12306验证码改版后,目前所有抢票工具都已经无法登录. 多么惨绝人寰的消息,小编相信各大互联网公司都在潜心钻研新的抢票助手,来破解全新的验证码模式. 下面小编带大家看看各种验证码的设计原理及其破解方法. 首先是纯文本式验证码,是比较原始的一种. 这种验证码并不符合验证码的定义,因为只有自动生成的问题才能用做验证码,这种文字验证码都是

javascript 学习小结 (三) jQuery封装ajax尝试 by FungLeo

javascript 学习小结 (三) jQuery封装ajax尝试 by FungLeo 前言 在JS学习中,对于原生的很多东西我理解得并不透彻.但是使用jQuery来操作DOM,基本上还是非常熟练的.但是对于AJAX数据交互的处理,我不是很理解. 近期团队交给我一个后端全接口提供给我的项目.我要利用这些接口来自己组织前端代码.为了学习,我决定不使用VUE或者其他的前端框架来做.而是只使用jQuery框架,数据的部分全部使用拼接字符串的形式实现. 获取数据,显示数据,提交数据. 在这个项目中(

短信验证码、图形验证码、邮件验证的自动化测试

短信验证码.图形验证码.邮件验证问题在自动化测试中是一个很常见的问题,也是一个很棘手的问题.设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站,而很不幸的是,我们所使用的一些自动化测试工具也包含在内.聊一聊最好用的接口方法. 接口法思路: 不管短信验证码.图形验证码还是邮件验证,都需要都auth中去认证.(auth与会员进行分离,auth只负责认证).那么在auth中提供一些后面借口就可以进行自动化测试了. 如根据手机号插入一个新的短信校验,但安全问题就比较突出了,我想到的解决方

发送短信验证码和邮箱验证码—Java实现

短信验证码 短信验证码都是调用一些接口来进行短信的发送,短信验证码在登录.注册等操作中使用的最广泛,本文这一节演示如何使用Java制作一个简单的短信验证码登录. 我这里演示使用的是聚合数据的短信接口(并非广告),因为聚合数据的接口调用比较方便和简单,所以首先得先去聚合数据里申请一个短信接口API: 申请时会需要你进行实名认证,如果你不想认证的话跳过认证也是可以的. 申请完短信API进入以下界面后点击"模板": 需要先申请一个短信模板,根据自己的需求定义这个模板内容(定义前先阅读此页面下

java 实现登录验证码 (kaptcha 验证码组件)

验证码的作用: 1.防止广告机注册和发帖.评论.2.防止暴力破解密码,特别是有管理员权限的密码. 在这里介绍一种非常实用的验证码生成工具:kaptcha 这个工具,可以生成各种样式的验证码,因为它是可配置的. 而 kaptcha工作的原理,是调用 com.google.code.kaptcha.servlet.KaptchaServlet,生成一个图片.同时将生成的验证码字符串放到 HttpSession中,直接从session中获取这张验证码图片,而不会占用实际内存. 使用 kaptcha 可

C++语言学习(三)——封装(Encapsulation)

C++语言学习(三)--封装(Encapsulation) 一.封装简介 C语言等面向过程编程中,数据以及数据的相关操作函数都是分离的独立个体:在C++等面向对象编程中,数据以及数据的相关操作被设计为对象,对象包括属性(数据)和操作(函数),两者共同构成对象实体(即类实体).面向对象编程使程序更模块化,更易读易写,提升了代码重用到一个更高的层次.面向对象编程中,数据和数据的操作封装为了对象.封装可以隐藏实现细节,使得代码模块化,是把过程和数据包围起来,对数据的访问只能通过已定义的接口.封装是一种

随机验证码、图片验证码和邮箱发送用户验证码

随机验证码.图片验证码和邮箱发送用户验证码 一.随机验证码 随机验证码的生成比较简单一般在注册用户的时候与邮箱或者手机信息接口相结合实现发送验证码功能,随机验证码只需要使用python内置的random随机数函数,调用random模块:import random,具体实现代码块 #随机验证码 def authCode(): code = '' for i in range(6): current = random.randrange(0,6)#randrange随机生成0-6的数字,但不包括6