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

php实现算术验证码功能

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-02 09:56:46 浏览: 评论:0 

最近学了php的图像函数,也练习的验证码的实现,在听从老师的建议下,自己写了一个算术验证码的函数,第一次自己独立完成一个小练习,感觉挺开心的,但是,也知道自己的局限,所以特意写出来,希望各路大神指点一下,能够更多的拓展自己的视野。

php代码如下:实现验证码的功能

  1. <?php 
  2. /** 
  3.  * @param int $width 宽度,默认为120 
  4.  * @param int $height 高度,默认为50 
  5.  * @param int $fontSize 字体的大小 
  6.  * @return 图片资源 
  7.  */ 
  8. function arithmeticCode($width=120,$height=50,$fontSize=20){ 
  9.   //开启session 
  10.   session_start(); 
  11.   //创建画布 
  12.   $img = imagecreatetruecolor($width,$height); 
  13.   //分配颜色 
  14.   $color = imagecolorallocate($img,255,255,255); 
  15.   //填充颜色 
  16.   imagefill($img,0,0,$color); 
  17.  
  18.   //干扰点 
  19.   for ($i = 0;$i < 500;$i++){ 
  20.     $pixColor = imagecolorallocate($img,mt_rand(100,200),mt_rand(100,200),mt_rand(100,200)); 
  21.     imagesetpixel($img,mt_rand(0,$width),mt_rand(0,$height),$pixColor); 
  22.   } 
  23.   //干扰线 
  24.   for ($i = 0;$i < 4;$i++){ 
  25.     $lineColor = imagecolorallocate($img,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120)); 
  26.     imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$lineColor); 
  27.   } 
  28.  
  29.   //定义一个数组存放运算符号 
  30.   $arr = ['+','-','*']; 
  31.   //计算数组的长度 
  32.   $len = count($arr); 
  33.   //定义一个1到20的数组 
  34.   $num = range(1,20); 
  35.   $numLen = count($num); 
  36.   //定义一个空数组来存放随机取得的验证码 
  37.   $code = []; 
  38.   for ($i = 0;$i < $len;$i++) { 
  39.     if ($i == 1) { 
  40.       $code[] = $arr[mt_rand(0,$len-1)]; 
  41.     }else { 
  42.       $code[] = $num[mt_rand(0,$numLen-1)]; 
  43.     } 
  44.   } 
  45.  
  46.   $str = implode($code);//将数组转为字符串 
  47.   $textColor = imagecolorallocate($img,mt_rand(100,200),mt_rand(100,200),mt_rand(100,200)); 
  48.   $fontAngle = 0; 
  49.   $x = ($width - $fontSize*3)/2; 
  50.   $y = ($height - $fontSize) / 2 + $fontSize
  51.   imagettftext($img,$fontSize,$fontAngle,$x,$y,$textColor,"./img/msyh.ttc",$str); 
  52.  
  53.   $res = getRes($code); 
  54.  
  55.  
  56.   //将函数存放在session中 
  57.   $_SESSION['res'] = $res
  58.  
  59.   //输出图片 
  60.   header("content-type:image/png"); 
  61.   imagepng($img); 
  62.  
  63.  
  64. /** 
  65.  * @param $arr 一个包含运算符号的数组 
  66.  * @return 返回一个运算结果 
  67.  */ 
  68. function getRes($arr) { 
  69.   $sum = 0; 
  70.   //判断数组元素下标为1的运算符号是什么 
  71.   switch ($arr[1]){ 
  72.     case '+'
  73.       $sum = $arr[0] + $arr[2]; 
  74.       break
  75.     case '-'
  76.       $sum = $arr[0] - $arr[2]; 
  77.       break
  78.     case '*'
  79.       $sum = $arr[0] * $arr[2]; 
  80.       break
  81.   } 
  82.  
  83.   return $sum
  84.  
  85. //调用函数 
  86. arithmeticCode(100,40,18); 

html的部分代码

  1. <!doctype html> 
  2. <html lang="en"
  3. <head> 
  4.   <meta charset="UTF-8"
  5.   <meta name="viewport" 
  6.      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
  7.   <meta http-equiv="X-UA-Compatible" content="ie=edge"
  8.   <title>Document</title> 
  9.   <style> 
  10.     img { 
  11.       position: relative; 
  12.       top: 20px; 
  13.     } 
  14.   </style> 
  15. </head> 
  16. <body> 
  17. <form action="test.php"
  18.   验证码 <input type="text" name="code"
  19.   <img src="./demo5.php" alt="点击刷新"
  20.   <br> 
  21.   <button>提交</button> 
  22. </form> 
  23. </body> 
  24. </html> 
  25. <script> 
  26.   //实现点击图片刷新验证码的功能 
  27.   var img = document.querySelector("img"); 
  28.   img.onclick = function () { 
  29.     this.src = this.src+"?m="+Math.random(); 
  30.   } 
  31. </script> 

test.php的测试

  1. <?php 
  2. session_start(); 
  3. $res = $_SESSION['res']; 
  4. $value = $_GET['code']; 
  5. if ($res == $value) { 
  6.   echo "test success"
  7. }else
  8.   echo "test fail"

以上就是我的代码组成.

Tags: php算术验证码

分享到: