基于PHP制作验证码


Posted in PHP onOctober 12, 2016

网站注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,为了防止网站被机器恶意注册。

生成验证码无非就那么几个步骤,首先是获取一个随机字符串,然后创建一个布画,将生成的字符串写到布画上,我们还可以在布画上画线画雪花,现在帖一段生成验证码的代码。

源代码:

<?php
session_start(); //开启session
//创建随机码,并保存在session中
for($i=0;$i<4;$i++)
{
$_nmsg.=dechex(mt_rand(0,15));
}
//保存到session中
$_SESSION['code']=$_nmsg;
//设置图片长和高

$_width=75;
$_height=25;
//创建一张图像
$_img=imagecreatetruecolor($_width,$_height);

//白色背景
$_white=imagecolorallocate($_img,255,255,255);
//填充到背景上
imagefill($_img,0,0,$_white);

//黑色边框
$_black=imagecolorallocate($_img,0,0,0);
imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);

//随即画出5个线条
for($i=0;$i<5;$i++)
{
$_rnd_color=imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);
}

//雪花
for($i=0;$i<10;$i++)
{
$_rnd_color=imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height),"*",$_rnd_color);
}

//输出验证码

for($i=0;$i<strlen($_SESSION['code']);$i++)
{
imagestring($_img,5,10+$i*15,mt_rand(0,10),$_SESSION['code'][$i],$_blackr);
}

//输出图像
header('Content-Type:image/png');
imagepng($_img);
//销毁图像
imagedestroy($_img);
?>

代码中将使用以下函数:

mt_rand — 生成更好的随机数
int mt_rand ([ int $min ], int $max )很多老的 libc 的随机数发生器具有一些不确定和未知的特性而且很慢。PHP 的 rand() 函数默认使用 libc 随机数发生器。

mt_rand()函数是非正式用来替换它的。该函数用了Mersenne Twister中已知的特性作为随机数发生器,它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍。

dechex — 十进制转换为十六进制返回一字符串,包含有给定 number参数的十六进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 "ffffffff"。

imagecreatetruecolor — 新建一个真彩色图像
resource imagecreatetruecolor ( int $x_size , int $y_size )

imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像。

imagecolorallocate — 为一幅图像分配颜色
int imagecolorallocate ( resource $image , int $red , int $green , int $blue )
imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色。red,green 和 blue 分别是所需要的颜色的红,绿,蓝成分。这些参数是 0 到 255 的整数或者十六进制的 0x00 到 0xFF。imagecolorallocate()必须被调用以创建每一种用在 image 所代表的图像中的颜色。

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

imagerectangle — 画一个矩形
bool imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col )
imagerectangle() 用 col 颜色在 image 图像中画一个矩形,其左上角坐标为 x1, y1,右下角坐标为 x2, y2。图像的左上角坐标为 0, 0。

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

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

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

imagedestroy — 销毁一图像

imagedestroy() 释放与 image 关联的内存。

将源代码保存为code.php是个php文件,我们该如何使用他呢?

imagepng已经将这个php文件输出成了png文件

直接调用就可以了

<img src="mycode.php"/>

如果要使用验证码,记得开启session哦

<?php
session_start();
echo $_SESSION['code'];
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
如何实现给定日期的若干天以后的日期
Oct 09 PHP
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
php通过淘宝API查询IP地址归属等信息
Dec 25 PHP
php微信高级接口群发 多客服
Jun 23 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
php框架知识点的整理和补充
Mar 01 PHP
实现PHP搜索加分页
Oct 12 #PHP
如何使用PHP给图片加水印
Oct 12 #PHP
php版微信数据统计接口用法示例
Oct 12 #PHP
php版微信js-sdk支付接口类用法示例
Oct 12 #PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 #PHP
如何使用php等比例缩放图片
Oct 12 #PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 #PHP
You might like
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
php pdo操作数据库示例
2017/03/10 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
laravel 数据验证规则详解
2019/10/23 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
2011/09/02 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
uploadify多文件上传参数设置技巧
2015/11/16 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
浅谈Vue.js
2017/03/02 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
js+css实现打字效果
2020/06/24 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
创建Django项目图文实例详解
2019/06/06 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
应届毕业生的自我鉴定
2013/11/13 职场文书
校园奶茶店创业计划书
2014/01/23 职场文书
英语教研活动总结
2014/07/02 职场文书
德能勤绩工作总结
2015/08/11 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP