php结合GD库简单实现验证码的示例代码

这篇文章主要介绍了php结合GD库简单实现验证码的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前几日正好重温下GD库,来玩一下生成带有干扰素的验证码。

生成字母数字的图片验证码

首先需要看php.ini配置文件中有没有GD库,如果没有开启,请自行开启下,我用的小皮面板,基本现在都给你带上了。

php结合GD库简单实现验证码的示例代码

开启GD库

需要生成4位(位数自定)验证码

  1. //首先生成4位验证码
  2. //开启session
  3. session_start();
  4. //数组集合
  5. $arr = array_merge(range(0,9),range('a','z'),range('A','Z'));
  6. //打乱数组
  7. shuffle($arr);
  8. //截取4位验证码
  9. $code = array_slice($arr,0,4);
  10. //全部转为小写
  11. $code = strtolower(join('',$code));
  12. var_dump($code);
  13. //将code存入session
  14. $_SESSION['code'] = $code;

生成4位验证码

php结合GD库简单实现验证码的示例代码

3. 开启GD库画图

注意一下这个imagecolorallocate函数

php结合GD库简单实现验证码的示例代码

注意

  1. //创建画布
  2. $img = imagecreate(120,30);
  3. //画布颜色
  4. $white = imagecolorallocate($img,255,255,255);
  5. //自定义集中颜色
  6. $c1 = imagecolorallocate($img,14,38,54);
  7. $c2 = imagecolorallocate($img,63,5,16);
  8. $c3 = imagecolorallocate($img,248,248,42);
  9. $c4 = imagecolorallocate($img,0,0,0);
  10. //点干扰素
  11. for ($i = 0;$i < 300;$i++){
  12. imagesetpixel($img,rand(0,120),rand(0,30),$c1);
  13. }
  14. //虚线干扰素
  15. for($j = 0;$j < 200;$j++){
  16. imagedashedline($img,rand(0,120),rand(0,30),rand(0,120),rand(0,30),$c2);
  17. }
  18. //线干扰素
  19. for ($j = 0;$j < 10;$j++){
  20. imageline($img,rand(0,120),rand(0,30),rand(0,120),rand(0,30),$c2);
  21. }
  22. //字体,这个你路径对了就OK
  23. $font = "simhei.ttf";
  24. //向图像写入文本
  25. imagettftext($img,18,2,40,20,$c4,$font,$code);
  26. //以jpg格式输出,还有以png啥的,imagepng这个自己看
  27. imagejpeg($img);
  28. //结束之后销毁,不销毁也行,php自带垃圾回收
  29. imagedestroy($img);

然后就生成了这个

php结合GD库简单实现验证码的示例代码

前台的展示

  1. <?php
  2. session_start();
  3. print_r($_POST);
  4. print_r($_SESSION['code']);
  5. //如果提交的验证码跟session里面存的一样及认证成功
  6. if($_POST['n3'] == $_SESSION['code']){
  7. echo '注册成功';
  8. }else{
  9. echo '注册失败';
  10. }
  11. ?>
  12. <!doctype html>
  13. <html >
  14. <head>
  15. <meta charset="UTF-8">
  16. <meta name="viewport"
  17. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  18. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  19. <title>Document</title>
  20. </head>
  21. <body>
  22. <form action="" method="post">
  23. <input type="text" name="n1" placeholder="cc">
  24. <input type="text" name="n2" placeholder="s">
  25. <input type="text" name="n3">
  26. <!--这里点击刷新验证码 -->
  27. <img src="xxx.php" onclick="this.src='index.php?'+Math.random()" alt="">
  28. <input type="submit" value="submit">
  29. </form>
  30. </body>
  31. </html>