用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

PHP验证码生成与验证例子

时间:2015-01-23  来源:西部数据  作者:西部数据

验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,下面我们来看常用的验证码生成与使用方法.

1 一个简单的验证码实例

1.1 显示验证码的图片,代码如下:

  1. <?php 
  2. $num=intval(mt_rand(1000,9999)); 
  3. for($i=0 ; $i<4 ;$i++) 
  4. {echo "<img src=img/yzm/".substr(strval($num),$i,1).".gif/>";} 
  5. ?> 

1.2 验证过程,代码如下:

  1. if (strval($inputyzm)!=strval($num)) 
  2. echo "<script>alert('验证码错误!');history.go(-1);</script>"
  3. exit

2 一个汉字的验证码实例

2.1 显示验证码的图片,代码如下:

  1. $str="汉","字","验","证","码"); //可以定义汉字的内容和个数 
  2. $word=strlen($str)); 
  3. for ($i=0;$i<4;$i++) 
  4. $num=rand(0,$word); 
  5. $img = $img."<img src='../images/yzm/".$num".gif'/>"
  6. $pic = $pic.$str[$num]; 

2.2 将生成的随机字符串赋给一个隐藏域,代码如下:

<input type="hidden" name="yzm" value="<?php echo $pic; ?/>"> 

2.3 定义一个check()函数,代码如下:

  1. <script language="javascript"
  2.     function check(form) 
  3.     { 
  4.     if(form.yzm.value==""){ 
  5.     alert("请输入验证码"); 
  6.     form.yzm.focus(); 
  7.     return false
  8.     } 
  9.     if(form.yzm.vale!=form.yz.value) 
  10.     {alert("验证码错误"); 
  11.     form.yzm.focus(); 
  12.     return false
  13.     } 
  14.     } 
  15.     </script> 

看一个完整的实例,php 验证码生成与调用的例子,平时开发中经常使用,记录一下.

1、验证码生成文件code.php,代码如下:

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

以上代码,参考了如下的文章,用php生成带有雪花背景的验证码.

2、调用验证码的页面 sessionValidate.php,代码如下:

  1. <?php 
  2.     session_start(); 
  3.     //在页首先要开启session, 
  4.     //error_reporting(2047); 
  5.     session_destroy(); 
  6.     //将session去掉,以每次都能取新的session值; 
  7.     //用seesion 效果不错,也很方便 
  8.     ?> 
  9.     <html> 
  10.     <head> 
  11.     <title>session 图片验证实例</title> 
  12.     </head> 
  13.     <body> 
  14.     此例为session验证实例 
  15.     <form action="" method="post"
  16.     验证码:<input type="text" name="validate" value="" size=10> <img src="checkNum_session.php"><br> 
  17.     <input type="submit"
  18.     </form> 
  19.     <?php 
  20.     //打印上一个session; 
  21.     echo "上一个session:<b>"._SESSION["authnum_session"]."</b><br>"
  22.     validate=""
  23.     if(isset(_POST["validate"])){ 
  24.     validate=_POST["validate"]; 
  25.     echo "您刚才输入的是:"._POST["validate"]."<br>状态:"
  26.     if(validate!=_SESSION["authnum_session"]){ 
  27.     //判断session值与用户输入的验证码是否一致; 
  28.     echo "<font color=red>输入有误</font>"
  29.     }else
  30.     echo "<font color=green>通过验证</font>"
  31.     } 
  32.     } 
  33.     /* 
  34.     //打印全部session; 
  35.     PrintArr(_SESSION); 
  36.     function PrintArr(aArray){ 
  37.     echo '<xmp>'; 
  38.     print_r(aArray); 
  39.     echo '</xmp>'; 
  40.     } 
  41.     */ 
  42.     ?> 
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
栏目更新
栏目热门