欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

php验证码的制作

发布时间:2025/3/14 php 63 豆豆
生活随笔 收集整理的这篇文章主要介绍了 php验证码的制作 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1 <?php 2 class Vcode { 3 private $width; // 4 private $height; // 5 private $num; //数量 6 private $code; //验证码 7 private $img; //图像的资源 8 function __construct($width=120, $height=30, $num=4) { 9 $this->width = $width; 10 $this->height = $height; 11 $this->num = $num; 12 $this->code = $this->createcode(); 13 } 14 //获取字符的验证码, 用于保存在服务器中 15 function getcode() { 16 return $this->code; 17 } 18 //输出图像 19 function outimg() { 20 //创建背景 (颜色, 大小, 边框) 21 $this->createback(); 22 //画字 (大小, 字体颜色) 23 $this->outstring(); 24 //干扰元素(点, 线条) 25 $this->setdisturbcolor(); 26 //输出图像 27 $this->printimg(); 28 } 29 //创建背景 30 private function createback() { 31 //创建资源 32 $this->img = imagecreatetruecolor($this->width, $this->height); 33 //设置随机的背景颜色 34 $bgcolor = imagecolorallocate($this->img, rand(225, 255), rand(225, 255), rand(225, 255)); 35 //设置背景填充 36 imagefill($this->img, 0, 0, $bgcolor); 37 //画边框 38 $bordercolor = imagecolorallocate($this->img, 0, 0, 0); 39 imagerectangle($this->img, 0, 0, $this->width-1, $this->height-1, $bordercolor); 40 } 41 42 //画字 43 private function outstring() { 44 for($i=0; $i<$this->num; $i++) { 45 $color= imagecolorallocate($this->img, rand(0, 128), rand(0, 128), rand(0, 128)); 46 $fontsize=rand(10,12); //字体大小 47 $x = 3+($this->width/$this->num)*$i; //水平位置 48 $y = rand(0, imagefontheight($fontsize)-3); 49 //画出每个字符 50 imagechar($this->img, $fontsize, $x, $y, $this->code{$i}, $color); 51 } 52 } 53 54 //设置干扰元素 55 private function setdisturbcolor() { 56 //加上点数 57 for($i=0; $i<100; $i++) { 58 $color= imagecolorallocate($this->img, rand(0, 255), rand(0, 255), rand(0, 255)); 59 //给验证码图片干扰点上色 60 imagesetpixel($this->img, rand(1, $this->width-2), rand(1, $this->height-2), $color); 61 //用color颜色在x,y坐标上画一个点 62 } 63 64 //加线条 65 for($i=0; $i<5; $i++) { 66 $color= imagecolorallocate($this->img, rand(0, 255), rand(0, 128), rand(0, 255)); 67 //给验证码图片干扰弧线上色 68 imagearc($this->img,rand(-10, $this->width+10), rand(-10, $this->height+10), rand(30, 300), rand(30, 300), 55,44, $color); 69 //画弧线 70 } 71 } 72 73 //输出图像 74 private function printimg() { 75 if (imagetypes() & IMG_GIF) { 76 header("Content-type: image/gif"); 77 imagegif($this->img); 78 } elseif (function_exists("imagejpeg")) { 79 header("Content-type: image/jpeg"); 80 imagejpeg($this->img); 81 } elseif (imagetypes() & IMG_PNG) { 82 header("Content-type: image/png"); 83 imagepng($this->img); 84 } else { 85 die("No image support in this PHP server"); 86 } 87 88 } 89 90 //生成验证码字符串 91 private function createcode() { 92 $codes = "3456789abcdefghijkmnpqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXY"; 93 // 去掉容易混淆的字符0oil012 94 $code = ""; 95 for($i=0; $i < $this->num; $i++) { 96 $code .=$codes{rand(0, strlen($codes)-1)};//rand()函数返回code字符串中任意一个位置 97 } 98 return $code; 99 } 100 101 //用于自动销毁图像资源 102 function __destruct() { 103 imagedestroy($this->img); 104 } 105 106 } 107 ?>

生成验证码的效果如图所示,上面所示代码的文件名为vcode.class.php;我们在code.php文件中开启session,引用这个文件;

代码如下:

<?php//开启sessionsession_start();include "vcode.class.php";//构造方法$vcode = new Vcode();//将验证码放到服务器自己的空间保存一份$_SESSION['code'] = $vcode->getcode();//将验证码图片输出$vcode->outimg();

表单测试代码如下

<?phpsession_start(); if(isset($_POST['dosubmit'])) {if(strtoupper($_SESSION['code']) == strtoupper($_POST['code']) ) {//验证输入的验证码echo "输入成功!<br>";}else{echo "输入不对!<br>";} } ?><body><form action="reg.php" method="post">username: <input type="text" name="username"> <br>password: <input type="password" name="password"> <br>code: <input type="text" onkeyup="if(this.value!=this.value.toUpperCase()) this.value=this.value.toUpperCase()" size="6" name="code"> <img src="code.php" onclick="this.src='code.php'" /> <br><!--1、将在输入框中的字符,当keyup的时候自动将里面的字符转换成大写2、点击图片是会切换验证码 --><input type="submit" name="dosubmit" value="登 录"> <br></form> </body>

 

转载于:https://www.cnblogs.com/hxjbc/p/5188057.html

总结

以上是生活随笔为你收集整理的php验证码的制作的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。