基于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 相关文章推荐
在PHP中执行系统外部命令
Oct 09 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
Laravel 5 学习笔记
Mar 06 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
Feb 15 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
Yii框架布局文件的动态切换操作示例
Nov 11 PHP
基于PHP实现用户在线状态检测
Nov 10 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
javascript对象之内置对象Math使用方法
2010/04/16 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
跟我学习javascript的call(),apply(),bind()与回调
2015/11/16 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
微信小程序之蓝牙的链接
2017/09/26 Javascript
angular 表单验证器验证的同时限制输入的实现
2019/04/11 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
Python操作MySQL数据库的方法
2018/06/20 Python
python绘制规则网络图形实例
2019/12/09 Python
详解python中各种文件打开模式
2020/01/19 Python
百丽国际旗下购物网站:优购
2017/02/28 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
Haggar官网:美国男装品牌
2020/02/16 全球购物
设计师个人求职信范文
2014/02/02 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
理想国读书笔记
2015/06/25 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript