A-A+
PHP功能很强大的验证码
一个php的验证码,并且还带有验证码判断文件,利用cookie判断验证码是否正确,验证码基础原理还是利用图像生成和干扰字符组合,这款验证码主要强大就在于利用了php数组进行干扰字符的组合,干扰了好几次,看来注册机器不好识别原理了,php验证码方法文件 yzm.php,php验证码使用判断文件:yzmdy.php,php验证码JS点击刷新文件:js.js,下面看看这三个文件的代码,使用时将其复制到同一个目录即可。
php验证码方法文件:yzm.php
<?php
$im=imagecreate(100,40);
$bgcolor=imagecolorallocate($im,0,0,0);//生成背景颜色
$fontcolor=imagecolorallocate($im,0,0,255);//生成线条颜色
$te=imagecolorallocate($im,255,255,0);//生成点的颜色
$wz=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
$wz1=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
$wz2=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
$wz3=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
for($x=1;$x<=10;$x++){
imageline($im,rand(0,100),rand(0,40),rand(0,100),rand(20,40),$fon
tcolor);//画线
}
for($d=0;$d<200;$d++){
imagesetpixel($im,rand()%100,rand()%100,$te);
}
$arr=array(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,
q,r,s,t,u,v,w,x,y,z);
$str1=$arr[rand(0,36)];
imagestring($im,6,20,20,$str1,$wz);//写字
$str2=$arr[rand(0,36)];
imagestring($im,6,30,20,$str2,$wz1);//写字
$str3=$arr[rand(0,36)];
imagestring($im,6,40,20,$str3,$wz2);//写字
$str4=$arr[rand(0,36)];
$str=$str1.$str2.$str3.$str4;
setcookie('yzm',$str);
imagestring($im,6,50,20,$str4,$wz3);//写字
header("content-type:image/jpeg");
imagejpeg($im);
?>
php验证码使用文件:
<?php
if($_POST['sub']){
if($_COOKIE['yzm']==$_POST['yzm']){
echo "正确";
}
else{
echo "错误";
}
}?>
<script language="javascript" src="js.js"></script>
<form action="" method="post" enctype="multipart/form-data">
请输入验证码:<input type="text" name="yzm"/><br>
<img src="yzm.php" id="img" onclick="iga();"/>
<input type="submit" name="sub" value="提交"/>
</form>
php验证码点击刷新JS文件:
[cc lang="Javascript"]
function iga(){
document.getElementById('img').src='yzm.php?'+Math.random();
}
[/code]
Code写的不错, 但你怎么界定多少的rand()背景干扰是最合适的呢?
只要验证码文字能看得清楚就行。。