您的位置:首页 > 运维架构 > 网站架构

php编写一个网站验证码

2013-10-26 14:37 471 查看
mt_rand(0,10); 这个函数的意思是获取0-10之间的随机数 就是输出结果 在0到10直接的任意一个数字 如果把后面的10改成20 就是获取0到20直接的随机数。

下面是代码

------------------------------------------------------------------------------------

<?php

//验证码的制作

//开启 session

session_start();

//随机码的个数

$_rnd_code = 4;

//先定义这个变量为空 要不然在php5.3中会有警告

$_rnd_color="";

$_nmsg="";

//创建随机码

for ($i=0;$i<$_rnd_code;$i++) { //创建一个循环 循环四次

//创建一个0到15的随机数 并且用16进制表示 然后赋值给一个变量 并循环4次

$_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);

//从起始xy轴开始 到结束xy轴 画出一个黑色的边框 后来决定这个边框 暂时不要 因为随机雪花会溢出

$a=false;

if($a){

imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);

}

//随机画出6个线条

//for循环 循环6次

for ($i=0;$i<6;$i++) {

//随机颜色 起始位置和结束位置都是随机

$_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));

//把刚才的4个随机颜色 画成4条线 线的位置随机

imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);

}

//随机雪花 其实就是文字

for($i=0;$i<70;$i++){

//老样子 随机颜色 但是呢 因为0-255有的时候颜色太深了 人的肉眼都看不清了 你这不是欺负人吗

//所以说 让颜色淡一点 可以看清 所以说 数值改成200-255 要记住 数值越大 颜色越淡

$_rnd_color = imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));

//创建一个随机位置 随机颜色的 1号字体 很小很小的*

imagestring($_img,1,mt_rand(1,$_width-2),mt_rand(1,$_height-2),'*',$_rnd_color);

}

//输出验证码

//循环4次

for($i=0;$i<strlen($_SESSION['code']);$i++){

//给他来个随机颜色 这样更加模糊一点 但是也不要太淡 要不然会被喷的

$_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));

/*

* 这一步是最难理解的 就是 输出上面循环的4个字符 但是位置是第一个字符是0乘以总长度然后除以4 然加上随机数1到10

* 这样可以保证不会溢出 然后保证过4个字都不挤在一起 高度是随机数1到整体高度的一半 这样可以保证

* 整体的文字可以显示出来然后显示文字 显示颜色

*/

imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);

}

//输出图片 要有两步 第一步 要表明这个标头

header('Content-Type: image/png');

//输出这个图片

imagepng($_img);

//销毁这个画布

imagedestroy($_img);

?>

---------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: