当前位置:首页 > PHP教程 > php应用 > 列表

php生成图片验证码的方法

发布:smiling 来源: PHP粉丝网  添加日期:2019-08-22 11:44:49 浏览: 评论:0 

本文为大家分享了php生成图片验证码的方法,供大家参考,具体内容如下.

首先从指定字符集合中随机抽取固定数目的字符,以一种不规则的方法画在画布上,再适当添加一些干扰点和干扰元素,最后将图片输出,一张崭新的验证码就完成了。

前端代码如下:

  1. <meta http-equiv="content-type" content="text/html;charset=utf-8"
  2.  
  3. <title>This is a test!</title> 
  4.  
  5. <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">  
  6.  
  7. <form name="form"
  8.  
  9.  <input type="text" placeholder="账号"><br> 
  10.  
  11.  <input type="password" placeholder="密码"><br> 
  12.  
  13.  <input type="text" placeholder="验证码"
  14.  
  15.  <img id="verImg" src="libs/verification.php"
  16.  
  17.  <a href="#" class="change" onclick="changeVer()">点击刷新</a><br> 
  18.  
  19.  <input type="submit" value="登录"
  20.  
  21. </form> 
  22.  
  23. <script type="text/javascript"
  24.  
  25. //刷新验证码 
  26.  
  27. function changeVer(){ 
  28.  
  29.  document.getElementById("verImg").src="libs/verification.php?tmp="+Math.random(); 
  30.  
  31.  
  32. </script> 

php脚本文件验证码的代码如下:

  1. <?php 
  2.  
  3.    
  4.  
  5. session_start(); 
  6.  
  7. //开启session记录验证码数据 
  8.  
  9.    
  10.  
  11. vCode(4, 15);//设置验证码的字符个数和图片基础宽度 
  12.  
  13.    
  14.  
  15. //vCode 字符数目,字体大小,图片宽度、高度 
  16.  
  17. function vCode($num = 4, $size = 20, $width = 0, $height = 0) { 
  18.  
  19.    
  20.  
  21.  !$width && $width = $num * $size * 4 / 5 + 15; 
  22.  
  23.  !$height && $height = $size + 10; 
  24.  
  25.    
  26.  
  27.  //设置验证码字符集合 
  28.  
  29.  $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW"
  30.  
  31.  //保存获取的验证码 
  32.  
  33.  $code = ''
  34.  
  35.    
  36.  
  37.  //随机选取字符 
  38.  
  39.  for ($i = 0; $i < $num$i++) { 
  40.  
  41.   $code .= $str[mt_rand(0, strlen($str)-1)]; 
  42.  
  43.  } 
  44.  
  45.    
  46.  
  47.  //创建验证码画布 
  48.  
  49.  $im = imagecreatetruecolor($width$height); 
  50.  
  51.    
  52.  
  53.  //背景色 
  54.  
  55.  $back_color = imagecolorallocate($im, mt_rand(0,100),mt_rand(0,100), mt_rand(0,100)); 
  56.  
  57.    
  58.  
  59.  //文本色 
  60.  
  61.  $text_color = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand(100, 255)); 
  62.  
  63.    
  64.  
  65.  imagefilledrectangle($im, 0, 0, $width$height$back_color); 
  66.  
  67.    
  68.  
  69.    
  70.  
  71.   // 画干扰线 
  72.  
  73.  for($i = 0;$i < 5;$i++) { 
  74.  
  75.   $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); 
  76.  
  77.   imagearc($im, mt_rand(- $width$width), mt_rand(- $height$height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color); 
  78.  
  79.  } 
  80.  
  81.    
  82.  
  83.   // 画干扰点 
  84.  
  85.  for($i = 0;$i < 50;$i++) { 
  86.  
  87.   $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); 
  88.  
  89.   imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $font_color); 
  90.  
  91.  } 
  92.  
  93.    
  94.  
  95.  //随机旋转角度数组 
  96.  
  97.  $array=array(5,4,3,2,1,0,-1,-2,-3,-4,-5); 
  98.  
  99.    
  100.  
  101.   // 输出验证码 
  102.  
  103.  // imagefttext(image, size, angle, x, y, color, fontfile, text) 
  104.  
  105.  @imagefttext($im$size , array_rand($array), 12, $size + 6, $text_color'c:\WINDOWS\Fonts\simsun.ttc'$code); 
  106.  
  107.  $_SESSION["VerifyCode"]=$code
  108.  
  109.  //no-cache在每次请求时都会访问服务器 
  110.  
  111.  //max-age在请求1s后再次请求会再次访问服务器,must-revalidate则第一发送请求会访问服务器,之后不会再访问服务器 
  112.  
  113.  // header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate"); 
  114.  
  115.  header("Cache-Control: no-cache"); 
  116.  
  117.  header("Content-type: image/png;charset=gb2312"); 
  118.  
  119.  //将图片转化为png格式 
  120. //phpfensi.com 
  121.  imagepng($im); 
  122.  
  123.  imagedestroy($im); 
  124.  
  125.  
  126. ?> 

Tags: php生成图片验证码

分享到: