PHP5生成图形验证码(有汉字)

利用PHP5中GD库生成图形验证码

类似于下面这样


1.利用GD库函数生成图片,并在图片上写指定字符

     imagecreatetruecolor   新建一个真彩色图像
     imagecolorallocate  为一幅图像分配颜色(调色板)
     imagestring  绘制字符

     imageline    绘制线条

     imagesetpixel  打像素点

2.输出图片

    imagejpeg($img);

PHP实现过程,代码中注释详细,这里不做过多解释

 verify.php

[php]  view plain  copy
 print ?
  1. <?php  
  2. //1.qi启用gd库GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。   
  3. // 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。  
  4. session_start();  
  5.   
  6. // 把GBK编码的字符串转换成UTF-8字符串,第一个参数之所以写GBK,是因为本php文件在主机中存储的编码是GBK编码  
  7. // UTF-8编码浏览器普遍支持,通用性强,这里就转换成UTF-8  
  8. $str = iconv("GBK""utf-8""芸芸众生绿水青山名胜古迹敞开心胸便会云蒸霞蔚快乐将永远伴随着你");  
  9. if(!is_string($str) || !mb_check_encoding($str,"utf-8"))  
  10. {  
  11.     exit("不是字符串或者不是utf-8");  
  12. }  
  13. $zhongwenku_size;  
  14. // 按UTF-8编码方式获取字符串的长度  
  15. $zhongwenku_size = mb_strlen($str,"UTF-8");  
  16.   
  17. // 把上述字符导入数组中  
  18. $zhongwenku = array();  
  19. for$i=0; $i<$zhongwenku_size$i++)  
  20. {  
  21.     $zhongwenku[$i] = mb_substr($str$i,1,"UTF-8");  
  22. }  
  23.   
  24. $result = "";  
  25.   
  26. // 图片上要写入的四个字符  
  27. for($i=0; $i<4; $i++)  
  28. {  
  29.     switch (rand(0, 1))  
  30.     {  
  31.         case 0:  
  32.             $result.=$zhongwenku[rand(0, $zhongwenku_size-1)];  
  33.             break;  
  34.         case 1:  
  35.             $result.=dechex(rand(0,15));  
  36.             break;  
  37.     }  
  38.       
  39. }  
  40.   
  41. $_SESSION["check"] = $result;  
  42.       
  43. // 创建一个真彩图片 宽100,高30  
  44. $img = imagecreatetruecolor(100, 30);  
  45.   
  46. // 分配背景颜色  
  47. $bg = imagecolorallocate($img, 0, 0, 0);  
  48.   
  49. // 分配文字颜色  
  50. $te = imagecolorallocate($img, 255,255,255);  
  51.   
  52. // 在图片上写字符串  
  53. //imagestring($img, rand(3,8), rand(1,70), rand(1,10), $result, $te);  
  54.   
  55. // 在图片上根据载入字体可以写出特殊字体  
  56. imagettftext($img, 13, rand(2, 9), 20 ,20, $te"MSYH.TTF",$result);  
  57.   
  58. $_SESSION["check"] = $result;  
  59.   
  60. for($i=0; $i<3; $i++)  
  61. {  
  62. //  $t = imagecolorallocate($img, rand(0, 255),rand(0, 255),rand(0, 255));  
  63.     // 画线  
  64.     imageline($img, 0, rand(0, 20), rand(70,100), rand(0, 20), $te);      
  65. }  
  66.   
  67. $t = imagecolorallocate($img, rand(0, 255),rand(0, 255),rand(0, 255));  
  68. // 为图片添加噪点  
  69. for($i=0; $i<200; $i++)  
  70. {  
  71.     imagesetpixel($img, rand(1, 100), rand(1, 30), $t);  
  72. }  
  73. // 发送http头信息 指定本次发送的是image中的jpeg  
  74. header("Content-type: image/jpeg");  
  75. // 输出jpeg图片至浏览器  
  76. imagejpeg($img);  
  77.   
  78. ?>  

submit.php

[php]  view plain  copy
 print ?
  1. <?php  
  2. session_start();  
  3. if(@$_POST['check'])  
  4. {  
  5.     if($_POST["check"] == $_SESSION["check"])  
  6.     {  
  7.         echo" 恭喜你!验证码输入正确!";  
  8.     }else{  
  9.         echo" 不好意思验证码输入错误";  
  10.     }  
  11. }  
  12. ?>  
  13.   
  14. <form action="" method="post">  
  15. <img src="verify.php"/> </br>  
  16. <input type="text" name="check"></br>  
  17. <input type="submit" value="submit"></br>  
  18. </form>  

代码中MRYH.ttf 是你要设置的字体。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值