时间:2021-07-01 10:21:17 帮助过:23人阅读
万能php验证码类,供大家参考,具体内容如下
code.php是验证码类,类的名称最好和文件名的名称一样,这样有利于我们的查看。
code.php
输出并显示 $this->show(); } }
- <?php
- header('Content-type:text/html;charset=utf8');
- class Code{
- // 验证码个数$number
- protected $number;
- // 验证码类型$codeType
- protected $codeType;
- // 验证码图像宽度$width
- protected $width;
- // 验证码$height
- protected $height;
- // 验证码字符串$code
- protected $code;
- // 图像资源$image
- protected $image;
- public function __construct($number=4,$codeType=0,$height=50,$width=100){
- //初始化自己的成员属性
- $this->number=$number;
- $this->codeType=$codeType;
- $this->width = $width;
- $this->height= $height;
- //生成验证码函数
- $this->code = $this ->createCode();
- }
- public function __get($name){
- if ($name == 'code'){
- return $this->code;
- }
- return false;
- }
- /*获取验证码*/
- public function getCode() {
- return $this->code;
- }
- /*图像资源销毁*/
- public function __destruct(){
- imagedestroy($this->image);
- }
- protected function createCode(){
- //通过你的验证码类型生成验证码
- switch ($this->codeType){
- case 0: //纯数字
- $code = $this->getNumberCode();
- break;
- case 1: //纯字母的
- $code = $this->getCharCode();
- break;
- case 2: //数字和字母混合
- $code = $this->getNumCharCode();
- break;
- default:
- die('不支持此类验证码类型');
- }
- return $code;
- }
- protected function getNumberCode(){
- $str = join('', range(0, 9));
- return substr(str_shuffle($str),0, $this->number);
- }
- protected function getCharCode(){
- $str = join('', range('a', 'z'));
- $str = $str.strtoupper($str);
- return substr(str_shuffle($str),0,$this->number);
- }
- protected function getNumCharCode(){
- $numstr = join('',range(0, 9));
- $str =join('', range('a', 'z'));
- $str =$numstr.$str.strtoupper($str);
- return substr(str_shuffle($str), 0,$this->number);
- }
- protected function createImage(){
- $this->image = imagecreatetruecolor($this->width,
- $this->height);
- }
- protected function fillBack(){
- imagefill($this->image, 0, 0, $this->lightColor());
- }
- /*浅色*/
- protected function lightColor(){
- return imagecolorallocate($this->image, mt_rand(133,255), mt_rand(133,255), mt_rand(133,255));
- }
- /*深色*/
- protected function darkColor(){
- return imagecolorallocate($this->image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
- }
- protected function drawChar(){
- $width = ceil($this->width / $this->number);
- for ($i=0; $i< $this->number;$i++){
- $x = mt_rand($i*$width+5, ($i+1)*$width-10);
- $y = mt_rand(0, $this->height -15);
- imagechar($this->image, 5, $x, $y, $this->code[$i], $this->darkColor());
- }
- }
- protected function drawLine(){
- for ($i=0;$i<5;$i++) {
- imageline($this->image,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$this->darkColor());
- }
- }
- protected function drawDisturb(){
- for ($i=0;$i<150;$i++){
- $x=mt_rand(0, $this->width);
- $y=mt_rand(0, $this->height);
- imagesetpixel($this->image, $x, $y, $this->lightColor());
- }
- }
- protected function show(){
- header('Content-Type:image/png');
- imagepng($this->image);
- }
- public function outImage(){
- // 创建画布
- $this->createImage();
- // 填充背景色
- $this->fillBack();
- // 将验证码字符串花到画布上
- $this->drawChar();
- // 添加干扰元素
- $this->drawDisturb();
- // 添加线条
- $this->drawLine();
- //
test.php是new一个新的验证码,并把它保存到session中,为我们验证码的验证起到保存和存储的作用。
test.php
- <?php
- //开启session
- session_start();
- require_once 'code.php';
- $code= new Code(4,1,50,100);
- $_SESSION['code']= $code->getCode();
- $code->outImage();
login.php就是最后的验证。
login.php
- <?php
- //开启Session
- session_start();
- //判断是否提交
- if(isset($_POST['dosubmit'])){
- //获取session中的验证码并转为小写
- $sessionCode=strtolower($_SESSION['code']);
- //获取输入的验证码
- $code=strtolower($_POST['code']);
- //判断是否相等
- if($sessionCode==$code){
- echo "<script type='text/javascript'>alert('验证码正确!');</script>";
- }else{
- echo "<script type='text/javascript'>alert('验证码错误!');</script>";
- }
- }
- ?>
- <!DOCTYPE html>
- <html>
- <head>
- <title></title>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
- <style type="text/css">
- *{margin:0px;padding:0px;}
- ul{
- width:400px;
- list-style:none;
- margin:50px auto;
- }
- li{
- padding:12px;
- position:relative;
- }
- label{
- width:80px;
- display:inline-block;
- float:left;
- line-height:30px;
- }
- input[type='text'],input[type='password']{
- height:30px;
- }
- img{
- margin-left:10px;
- }
- input[type="submit"]{
- margin-left:80px;
- padding:5px 10px;
- }
- </style>
- </head>
- <body>
- <form action="login.php" method="post">
- <ul>
- <li>
- <label>用户名:</label>
- <input type="text" name="username"/>
- </li>
- <li>
- <label>密码:</label>
- <input type="password" name="password"/>
- </li>
- <li>
- <label>验证码:</label>
- <input type="text" name="code" size="4" style="float:left"/>
- <img src="test.php" onclick="this.src='test.php?Math.random()'"/>
- </li>
- <li>
- <input type="submit" value="登录" name="dosubmit"/>
- </li>
- </ul>
- </form>
- </body>
- </html>
以上就是实用的php验证码类分享的详细内容,更多请关注Gxl网其它相关文章!