php验证码

 1 <?php
 2 session_start();
 3 header('Content-Type: text/html;charset=UFT-8');
 4 header("Content-type:image/png");
 5 //定义header,声明图片文件,最好是png,无版权之扰; 
 6 //生成新的四位整数验证码
 7 $verifiability_code = '';
 8 $str = 'abcdefghijkmnpqrstuvwxyz23456789'; 
 9 
10 //定义用来显示在图片上的数字和字母;
11 $l = strlen($str); //得到字串的长度; 
12 //循环随机抽取四位前面定义的字母和数字; 
13 for($i=1;$i<=4;$i++)
14 { 
15 $num=rand(0,$l-1); 
16 //每次随机抽取一位数字;从第一个字到该字串最大长度,
17 //减1是因为截取字符是从0开始起算;这样34字符任意都有可能排在其中;
18 $verifiability_code.= strtoupper($str[$num]);
19 //将通过数字得来的字符连起来一共是四位;
20 }
21 
22 //使用前先注销掉原有的数据
23 unset ($_SESSION['verifiability_code']);
24 //存入SESSION内
25 $_SESSION['verifiability_code'] = $verifiability_code;
26 
27 //其它页面只要包含了该图片
28 //生成验证码图片,
29 srand((double)microtime()*1000000);
30 $im = imagecreate(50,22);//图片宽与高; 
31 //主要用到黑白灰三种色;
32 $black = ImageColorAllocate($im, 238,238,238);
33 $white = ImageColorAllocate($im, 0,0,0);
34 $gray = ImageColorAllocate($im, 100,100,100); 
35 //将四位整数验证码绘入图片
36 imagefill($im,68,60,$gray);
37 //如不用干扰线,注释就行了;
38 $li = ImageColorAllocate($im, 255,255,255);
39 for($i=0;$i<3;$i++) 
40 {//加入3条干扰线;也可以不要;视情况而定,因为可能影响用户输入; 
41 imageline($im,rand(0,30),rand(0,21),rand(20,40),rand(0,21),$li);
42 } 
43 //字符在图片的位置;
44 imagestring($im, 5, 10, 2, $verifiability_code, $white);
45 for($i=0;$i<90;$i++)
46 {//加入干扰象素
47 imagesetpixel($im, rand()%70 , rand()%30 , $gray);
48 }
49 ImageGIF($im);
50 ImageDestroy($im);
51 ?>

 

posted @ 2013-01-25 11:29  /折磨  阅读(180)  评论(0编辑  收藏  举报