PHP实现验证码制作

captcha.php(PHP产生验证码并储存Session):

<?php

//开启Session
session_start();

//绘制底图
$image = imagecreatetruecolor(100, 30);//返回资源型的值
$bgcolor = imagecolorallocate($image, 255, 255, 255);//创建一个底图
imagefill($image, 0, 0, $bgcolor);//区域填充

/*
//输出随机数字
for($i = 0; $i < 4; $i++){
	$fontsize = 6;//字体大小
	$fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//字体颜色
	$fontcontent = rand(0, 9);//字符串内容

	$x = ($i*100/4) + rand(5, 10);//数字的横坐标
	$y = rand(5, 10);//数字的纵坐标

	imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);//在图像资源上绘制字符
}
*/

//产生随机字符串
$captch_code = ‘‘;
for($i = 0; $i < 4; $i++){
	$fontsize = 6;//字体大小
	$fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120),rand(0, 120));//字体颜色

	$data = ‘23456789ABCDEFGHJKLMNOPQRTUVWXYZabcdefghjkmnopqrtuvwxy‘;//随机字符串的字典
	$fontcontent = substr($data, rand(0, strlen($data)), 1);//字符
	$captch_code .= $fontcontent;//拼接字符串

	$x = ($i*100/4) + rand(5, 10);//字符横坐标
	$y = rand(5, 10);//字符纵坐标

	//在图像资源上绘制字符
	imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
//将验证码字符串存储在Session
$_SESSION[‘authcode‘] = $captch_code;

//点干扰
for($i = 0; $i < 200; $i++){
	$pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
	imagesetpixel($image, rand(1, 99), rand(1, 99), $pointcolor);
}

//线干扰
for($i = 0; $i < 6; $i++){
	$linecolor = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
	imageline($image, rand(1, 99), rand(1, 99), rand(1, 99), rand(1, 99), $linecolor);
}

//输出图片内容
header(‘content-type:image/png‘);//输出内容的格式
imagepng($image);//输出内容
imagedestroy($image);//销毁资源

?>


captcha-form.html(Web表单验证):

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>验证码</title>
</head>

<body>
  <form method="post" action="./captcha-result.php">
    
	<p>
	  验证码图片:
	  <img id="captcha-img" border="1" src="./captcha.php?r=0">
	  <a href="javascript:void(0);"  id="authcode" type="text" name="authcode" value=""></p>

	<p><input type="submit" value="提交" style="padding:6px 20px;"></p>
  
  </form>

  <script>
    //动态获取验证码
    function getCaptchaImg(){
		//从服务器获取新的验证码
		document.getElementById(‘captcha-img‘).src=‘./captcha.php?r=‘+Math.random();
		//清空文本框里已输入的内容
		document.getElementById(‘authcode‘).value="";
	}
  </script>

</body>
</html>

效果图



captcha-result.php(PHP判断验证码是否正确):

<?php

//验证验证码是否正确
if(isset($_REQUEST[‘authcode‘])){
	//开启Session
	session_start();

	//strtolower()将字符串都转换成小写,将验证码设置为不区分大小写型
	if(strtolower($_REQUEST[‘authcode‘]) == strtolower($_SESSION[‘authcode‘])){
		echo "输入正确";
	}else{
		echo "输入错误";
	}
	exit();
}

?>



所用到的函数原型:

<?php

//imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。
resource imagecreatetruecolor ( int $width , int $height );

//imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。
int imagecolorallocate ( resource $image , int $red , int $green , int $blue );

//imagefill() 在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。
bool imagefill ( resource $image , int $x , int $y , int $color );

//imagestring() 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 坐标处(这是字符串左上角坐标,整幅图像的左上角为 0,0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col );

//imagesetpixel() 在 image 图像中用 color 颜色在 x,y 坐标(图像左上角为 0,0)上画一个点。
bool imagesetpixel ( resource $image , int $x , int $y , int $color );

//imageline() 用 color 颜色在图像 image 中从坐标 x1,y1 到 x2,y2(图像左上角为 0, 0)画一条线段。
bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color );

//imagepng() 将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename 给出了文件名则将其输出到该文件。
bool imagepng ( resource $image [, string $filename ] );

//imagedestroy() 释放与 image 关联的内存。image 是由图像创建函数返回的图像标识符,例如 imagecreatetruecolor()。
bool imagedestroy ( resource $image );

?>
时间: 2024-10-07 05:19:05

PHP实现验证码制作的相关文章

网站验证码制作

asp.net验证码制作 using System; using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Text; using System.Collections; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebPa

动态验证码制作(RandomCodeImage )

在很多的网页中,他们的登录,注册等等地方都有验证码的存在,这下验证码都是动态生成的,有些验证码模糊不堪,有些干扰很多, 而验证码是用来干什么的呢?防止人为输入的不安全?错,验证码真正的用途在于,防止机器的识别,所以,验证码往往都是图片格式的, 人可以识别出来,而机器就识别不出来,这样就可以防止机器识别,就可以保证正在操作的是人,而并不是机器的操作,安全性更高: 下面就分享一下我自己写得一个简单的验证码制作的代码!希望可以一起学习,有什么不足,敬请指正: 这是我封装的一个验证码制作的java类:

浅尝Java验证码制作(上)

相信大家对验证码这玩意不会陌生,无论是申请账号还是某些情况下登录时都会要求输入验证码.经过统计,验证码一次验证就成功通过的概率是90%,并不高,那么很多人对于这种降低用户体验度的设计肯定会怀疑他的必要性,但黑格尔说过:凡是合乎理性的东西都是现实的:凡是现实的东西都是合乎理性的.接下来我们来了解一下验证码. 验证码是一种区别用户是计算机还是人的公共全自动程序,他被用于防止恶意破解密码.刷票.论坛灌水,防止黑客通过暴力破解方式不断地登录,应用于银行.社区.论坛.投票系统等等. 废话不多说我们来看看我

MVC-简单验证码制作

1.制作验证码: using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using

webform:图片水印、验证码制作

一.图片水印 1:引命名空间System.Drawing; 前端代码 <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server" Text="上传" /><br /> <asp:Image ID="Image1&

验证码制作

Bitmap bit = new Bitmap(90, 40);//画布大小 Graphics g = Graphics.FromImage(bit);//创建绘制对象,告诉它往哪张图片上绘制 Random r = new Random(); string s = ""; Color color1 = Color.FromArgb(r.Next(155, 255), r.Next(155, 255), r.Next(155, 255)); g.FillRectangle(new Sol

图片验证码制作

default.aspx里:包含点击图片更新的js代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> &l

【2017-6-9】WebForm 随机验证码制作

前台代码 <body> <form id="form1" runat="server"> <div> <br /> <br /> <%--用户输入的文本框--%> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <%--验证码图片--%> <img

12-8-协议、请求、响应、画布(验证码制作)

fwrite(文件句柄,写入内容)         返回值为写入文件的字节长度 fopen(文件路径,打开方式)          这个便是文件句柄 fclose(文件句柄)              关闭文件句柄 文件句柄打开后,可以对文件进行读写操作,关闭文件句柄便不能再对文件进行读写操作了. copy(被复制文件路径,复制后存放文件的路径)                 复制文件 存放位置要包含文件名 unlink(文件路径)              删除文件 filemtime(文件