现在的位置: 首页 > 综合 > 正文

php编写一个网站验证码

2013年02月04日 ⁄ 综合 ⁄ 共 2196字 ⁄ 字号 评论关闭

大家好,我是过往云烟,今天做的是一个网站验证码, 并不算太复杂, 只是有一个函数比较重要

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

下面是代码

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

<?php
/**
* QQ:279861795
* Author: 过往云烟
* Date: 2011-6-28
*/
//验证码的制作

//开启 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);
?>

 

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

里面有我写的很多注释 其实只要明白这个思路 做出来这个验证码 并不算太难

先些到这里

闪人.......

                                            过往云烟2011/06/28

抱歉!评论已关闭.