php生成随机验证码图片

2023-09-15 11:07:36

1,CaptchaPicture.php用于生成画布,然后在画布上生成四位随机验证码

<?php
session_start();
header("Content-type:image/png");   //创建图像的格式
$image_width=76;                           //设置图像的宽度
$image_height=40;                          //设置图像的高度
$length=4;                                 //字符串长度为4
//除去0,2,o,l容易混淆的字符
$str="23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKMNOPQRSRUVWXYZ";
$code='';
for($i=0;$i<$length;$i++){
    $code.=$str[mt_rand(0,strlen($str))-1];  //从字符串中随机选择
}
$_SESSION['verify']=$code;                              //从获取到的随机书验证码写入到Session变量中
$image=imagecreate($image_width,$image_height);          //创建一个画布
imagecolorallocate($image,25,255,255);   //设置画布的颜色
For($i=0;$i<strlen($_SESSION['verify']);$i++){    //循环读取Session变量中的验证码
    $font = mt_rand(3,5);  //设置随机的字体
    $x=mt_rand(1,8)+$image_width*$i/4;        //设置随机字符所在位置的x坐标
    $y=mt_rand(8,$image_height/4);            //设置随机字符所在位置的y坐标
    //设置字符颜色
    $color = imagecolorallocate($image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));
    imagestring($image,$font,$x,$y,$_SESSION['verify'][$i],$color);    //水平输出字符
}
//绘制干扰元素点
$pixel=30;
$black = imagecolorallocate($image,0,0,0);
for($i=0;$i<$pixel;$i++){
    imagesetpixel($image,mt_rand(0,$image_width-1),mt_rand(0,$image_height-1),$black);
}
imagepng($image);  //生成png格式的图像
imagedestroy($image);  //释放图片资源
?>

2,SubmitVerify.php用于做一个简单的测试,验证验证码功能是否正常

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="CheckLogin.php" method="post">
    <div class="verify">
        <input type="text" id="verify" name="verify" class="input" placeholder="验证码">
        <a>
            <img src="CaptchPicture.php" onclick="this.src=this.src+'?'+Math.random()">   //单击验证码生成新的验证码
        </a>
    </div>
<button type="submit">提交</button>

</form>
</body>
</html>

3,CheckLogin.php用于验证提交后是否能接受到传递的信息,以及判断输入的验证码和生成的验证码是否一致

<?php
session_start();
$checks = $_POST["verify"];   //获取表单提交的验证码(用户输入的验证码)
if ($checks=="") {
    echo "<script>alert('验证码不能为空');
window.location.href='SubmitVerify.php';</script>";
}
    if ($checks==$_SESSION["verify"]){            //这个获取的是系统随机生成的验证码
        echo "<script>alert('登录成功');</script>";
    }else{
        echo "<script>alert('你输入的验证码不正确!')
window.location.href='SubmitVerify.php'
</script>";
    }

最后我验证出了一点小问题,第一次提交的结果总是错的,第二次输入正确才行,目前还没有解决,酌情使用。

更多推荐

9.2 【MySQL】独立表空间结构

9.2.1区(extent)的概念对于16KB的页来说,连续的64个页就是一个区,也就是说一个区默认占用1MB空间大小。不论是系统表空间还是独立表空间,都可以看成是由若干个区组成的,每256个区被划分成一组。画个图表示就是这样:其中extent0~extent255这256个区算是第一个组,extent256~exte

Qt 数据库的注册和登录功能

widget.h#ifndefWIDGET_H#defineWIDGET_H#include<QPushButton>#include<QWidget>#include<QDebug>#include<QString>#include<QMessageBox>#include<QFile>#include"client

Linux下的第一个小程序——进度条

目录​编辑一,进度条的第一个版本1.准备工作2.写Makefile文件3.开始构建进度条1.process.h文件2.process.c文件3.main.c文件二,进度条的第二个版本1.为什么还要写第二个版本?2.如何升级?3.升级代码1.搭建场景一,进度条的第一个版本1.准备工作在写进度条之前,我们得把前期的准备工作

01_网络编程_传统IO

网络编程1.什么是网络编程在网络通信协议下,不同计算机上运行的程序,进行的数据传输。如果想把一个计算的结果,或者是电脑上的文件通过网络传递给你的朋友,就需要用到网络编程。在实际生活中,网络通信无处不在**应用场景:**即时通信、网游对战、金融证券、国际贸易、邮件、等等不管是什么场景,都是计算机跟计算机之间通过网络进行数

【C++】C++ 语言对 C 语言的加强 ② ( 变量检测增强 - C++ 不允许重复定义变量 | struct 关键字增强 - struct 作用等同于 class )

文章目录一、变量检测增强-C++不允许重复定义变量二、struct关键字增强-struct作用等同于class一、变量检测增强-C++不允许重复定义变量在早期的C语言编译器版本中,可以重复定义多个同名的全局变量,编译器会将这些同名的全局变量链接到全局数据区的相同地址空间中;如:在一个头文件中,定义了变量inta;,在另

【C++】C 语言与 C++ 语言的关系 ( C 语言发展 | C 语言缺陷 | C 语言 + 面向对象 + 高级语言特性 | C++ 语言增加内容 | C 语言与 C++ 语言应用场景 )

文章目录一、C语言发展二、C语言缺陷三、C语言+面向对象+高级语言特性1、C语言衍生的高级语言2、C语言与C++语言关系3、C++语言增加内容4、C语言与C++语言应用场景一、C语言发展C语言被开发之前并没有经过缜密的设计,而是在使用过程中逐渐完善的;C语言发展经过如下阶段:初始阶段:1972年至1978年,C语言初步

Linux基本命令,基础知识

进到当前用户目录:cd~回到上级目录:cd..查看当前目录层级:pwd创建目录:mkdirmkdirruanjian4/linux/zqm41-p级联创建文件夹(同时创建多个文件夹需要加-p)查看详细信息:ls-l(即ll)查看所有详细信息:ls-al隐藏文件是以.开头的查看:ls-alrm-rf删除路径级联删除:rm

k8s集群中部署项目之流水线

微服务项目部署之流水线编写一、部署微服务项目环境说明1.1代码托管到gitee1.2镜像托管到dockerhub用户名:nextgomsb密码:abc***.com1.3流水线工具KubeSphere二、通过KubeSphere部署之拉取代码流水线编写2.1准备凭证2.2编辑流水线pipeline{agent{node

python[sys模块使用]:配置subprocessing实现后台调用python函数,并传递次数

一、sys模块的基本使用1、获取脚本执行时传递的所有参数:sys.argv[0]#表示程序自身sys.argv[1:]#表示的是在脚本运行py文件时,传递进来的所有参数2、sys.exit(n)退出程序,exit(0)是正常退出3、sys.version:获取python解释程序版本4、sys.platform:返回操

在家访问校园网内网,异地用校园网上知网

具体思路,使用tailscale连接校园网安装了代理服务的服务器(这里以centos7.6为服务端),windows10为客户端(家里的电脑),用tailscale连接两个设备,内网穿透。记住两个设备的ip,然后再用windows连centos的代理,我一般用ssr,ssr的服务端搭建发不出来,就不说了(我后期考虑在个

Iterator设计模式

目录1、示例1.1Aggregate接口1.2Iterator接口1.3Book类1.4BookShelf类1.6BookShelfIterator类1.7Main类2、解释Iterator模式中的角色2.1Iterator模式的存在意义2.2抽象类和接口2.3Aggregate和Iterator的对应2.4容易弄错"

热文推荐