php编写一个网站验证码
2013-10-26 14:37
543 查看
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);
?>
---------------------------------------------------------------
下面是代码
------------------------------------------------------------------------------------
<?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);
?>
---------------------------------------------------------------
相关文章推荐
- php编写一个网站验证码
- 【PHP】五分钟教你编写一个实时弹幕网站
- 【PHP】五分钟教你编写一个实时弹幕网站
- 【Smarty】利用Smarty编写一个VC分离的php网站
- 【PHP】五分钟教你编写一个实时弹幕网站
- PHP编写学校网站上新生注册登陆程序的实例分享
- 一个经典的PHP验证码类分享
- PHP开发网站代码编写规范
- PHP扩展学习:编写一个类
- 如何编写一个独立的PHP扩展
- php验证码的编写
- 一个轻量级的c编写的php接口平台框架
- 一个php写验证码显示不出图片内容的解决过程
- 如何编写一个PHP的C扩展
- (转载)如何用PHP开发一个完整的网站 讲解开发流程 多人开发
- 一个简单的PHP验证码实现代码
- 一个简单的php图形验证码生成程序
- 分享一个php验证码程序 简单 实用