实现通用 Web CAPTCHA 图形验证码 JavaScript 脚本 API 服务 (JavaScript 脚本动态页面引用) 完整代码...

本文详细介绍了CAPTCHA的原理及其实现方式,探讨了如何通过图像处理和模式识别技术来生成有效的验证码,以防止自动化工具的恶意操作。






转载于:https://www.cnblogs.com/Microshaoft/archive/2008/12/14/CAPTCHA.html

当然,以下是`generate_captcha.php`的PHP脚本,用于生成随机验证码并将它保存到会话中: ```php <?php session_start(); // 设置验证码生成参数 $length = 5; // 验证码字符长度 $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; // 可选字符集 // 生成随机验证码 $captcha = ''; for ($i = 0; $i < $length; $i++) { $captcha .= $characters[rand(0, strlen($characters) - 1)]; } $_SESSION['captcha'] = $captcha; // 将验证码存入会话 header('Content-Type: image/png'); // 设置返回内容为图片 echo base64_encode(imagepng(generate_captcha_image($captcha))); // 使用base64编码将验证码转换为PNG图像 function generate_captcha_image($captcha) { // 创建一个临时的GD资源 $width = 100; // 验证码宽度 $height = 40; // 验证码高度 $image = imagecreatetruecolor($width, $height); $font_size = 20; // 设置背景颜色 $bg_color = imagecolorallocate($image, 255, 255, 255); imagefilledrectangle($image, 0, 0, $width, $height, $bg_color); // 设置字体颜色 $font_color = imagecolorallocate($image, 0, 0, 0); // 写验证码 imagettftext($image, $font_size, 0, 10, $height - 10, $font_color, 'arial.ttf', $captcha); // 假设ttf文件路径是'arial.ttf' return $image; } ?> ``` 关于`captcha.js`,这是一个基本的JavaScript脚本,用于显示新验证码并监听输入验证: ```javascript // captcha.js window.onload = function() { var imgCaptcha = document.getElementById('captcha'); var inputCaptcha = document.getElementById('captcha_input'); // 间隔秒数,每秒更新一次验证码 var refreshInterval = 60; // 更新验证码函数 function refreshCaptcha() { fetch('generate_captcha.php') .then(response => response.blob()) .then(blob => { var img = document.createElement('img'); img.src = URL.createObjectURL(blob); img.onload = function() { imgCaptcha.replaceChild(img, imgCaptcha.firstChild); }; }); } // 每隔refreshInterval秒更新验证码 setInterval(refreshCaptcha, refreshInterval * 1000); // 监听输入验证 inputCaptcha.addEventListener('keyup', function(e) { if (this.value === '') { this.style.borderColor = '#ccc'; } else if (this.value !== document.querySelector('#captcha').alt) { this.style.borderColor = 'red'; } else { this.style.borderColor = '#0095DD'; } }); }; ``` 请确保在服务器上正确配置字体文件(如`arial.ttf`),并且这两个脚本放在了正确的目录下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值