PHP 实现验证码
来源:互联网 发布:阿里云 招聘 安全 编辑:程序博客网 时间:2024/06/08 03:12
绘制验证码类
<?phpclass Captcha { const CODE_LENGTH = 4; // 验证码长度固定为 4,可以根据实际需要修改 const LINE_COUNT = 4; // 干扰线个数 const DOT_COUNT = 200; // 干扰点个数 // 验证码备选字符 static $CANDIDATES = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; public function __construct($width, $height) { $this->width = $width; $this->height = $height; // 创建图像对象 $this->image = imagecreatetruecolor($width, $height); // 创建验证码 $this->generateCaptchaCode(); } public function __destruct() { // 销毁图像对象 imagedestroy($this->image); } public function paint() { // 绘制背景 $this->paintBackground(); // 绘制验证码 $this->paintText(); // 绘制干扰 $this->paintDirty(); } public function output() { // 设置头部为PNG图片 header('Content-Type: image/png'); // 输出到浏览器 imagepng($this->image); } public function code() { return $this->code; } private function paintBackground() { // 背景颜色设置为白色 $color = imagecolorallocate($this->image, 255, 255, 255); // 填充背景 imagefill($this->image, 0, 0, $color); } private function paintText() { // 遍历验证码,一个字符一个字符地绘制 for ($i = 0; $i < strlen($this->code); ++$i) { $fontsize = 6; $color = imagecolorallocate($this->image, rand(0,50), rand(0,50), rand(0,50)); $x = ($i * 100 / self::CODE_LENGTH) + rand(5, 10); $y = rand(5, 10); imagestring($this->image, $fontsize, $x, $y, $this->code[$i], $color); } } private function paintDirty() { // 绘制点 for ($i = 0; $i < self::DOT_COUNT; ++$i) { // 点的颜色 $pointcolor = imagecolorallocate($this->image, rand(100,200), rand(100,200), rand(100,200)); // 画点 imagesetpixel($this->image, rand(1,99), rand(1,29), $pointcolor); } // 绘制线条 for ($i = 0; $i < self::LINE_COUNT; $i++) { // 线的颜色 $linecolor = imagecolorallocate($this->image, rand(100,200), rand(100,200), rand(100,200)); // 画线 imageline($this->image, rand(1,$this->width-1), rand(1,29), rand(1,99), rand(1,29), $linecolor); } } private function generateCaptchaCode() { // 从备选字符串中随机选取字符 for ($i = 0; $i < self::CODE_LENGTH; ++$i) { $len = strlen(self::$CANDIDATES); $pos = rand(0, $len - 1); $ch = self::$CANDIDATES[$pos]; $this->code .= $ch; } } private $image = NULL; // 图像对象 private $code = ""; // 验证码 private $width = 0; // 图像长度 private $height = 0; // 图像宽度}?>
绘制图片页面
<?phpsession_start(); // 开启 Session,必须是第一句require_once "./Captcha.php";$captcha = new Captcha(100, 30); // 创建对象$_SESSION['captcha'] = $captcha->code(); // 将验证码存入Session$captcha->paint(); // 绘制$captcha->output(); // 输出?>
表单页面
<?phpsession_start(); // 开启Session,必须是第一句?><!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>提交页面</title> <script> function validate_form(form) { with (form) { if (captcha.value == null || captcha.value == "") { alert("验证码不能为空!"); return false; } } return true; } </script></head><body> <form method="post" action="./validate.php" onsubmit="return validate_form(this)"> 验证码:<input type="text" name="captcha" value="" size=10> <img title="点击刷新" id="captchaImg" border="1" src="./captchaImage.php" onclick="this.src='./captchaImage.php?r=' + Math.random();"></img><br> <input type="submit"/> </form></body></html>
验证页面
<?phpsession_start(); // 开启Session,必须是第一句?><!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>验证页面</title></head><body> <?php if (isset($_POST['captcha']) && strcasecmp($_POST['captcha'], $_SESSION['captcha']) == 0) { echo "Succeeded!"; } else { ec`o "Failed!"; } ?></body></html>
运行结果
查看运行结果
阅读全文
1 0
- php实现验证码
- PHP实现验证码
- PHP实现验证码
- PHP实现验证码
- php实现验证码
- php实现验证码
- PHP实现验证码
- PHP---验证码实现
- php验证码实现
- 【PHP】验证码实现
- php实现验证码
- PHP验证码实现
- PHP实现验证码
- php 实现验证码
- php 验证码实现
- php验证码实现
- PHP 实现验证码
- PHP实现验证码
- Qt for Mac点击dock事件处理
- 叉乘分配律的几何证明
- Cloudera 安装parcel hang的问题
- argparse
- TCP 实例
- PHP 实现验证码
- MySQL 学习笔记本2——SQL 语句
- Go并发编程之协程
- ENVI教程:InSAR技术,相位解缠
- Python批量导入图片生成能治疗颈椎病的HTML5版课件
- hibernate学习教程一相关配置
- Keepalived+LVS
- Object类的哪些方法?
- 怎么在spring官网上下载spring的jar包, 源代码和文档?