php - 如何验证我的 PHP 验证码不区分大小写?
问题描述
我希望提交验证码的用户能够输入大写和小写的混合,无论验证码图像说什么,并且验证码仍然可以验证。
因此,例如,如果验证码图像显示“r9zvk1”,用户应该能够输入“R9zvk1”并且仍然验证验证码是正确的。
我当前的验证码:
<?php
session_start();
$permitted_chars = 'abcdefghjklmnpqrstuvwxyz0123456789';
function generate_string($input, $strength = 10) {
$input_length = strlen($input);
$random_string = '';
for($i = 0; $i < $strength; $i++) {
$random_character = $input[mt_rand(0, $input_length - 1)];
$random_string .= $random_character;
}
return $random_string;
}
$image = imagecreatetruecolor(200, 50);
imageantialias($image, true);
$colors = [];
$red = rand(125, 175);
$green = rand(125, 175);
$blue = rand(125, 175);
for($i = 0; $i < 5; $i++) {
$colors[] = imagecolorallocate($image, $red - 20*$i, $green - 20*$i, $blue - 20*$i);
}
imagefill($image, 0, 0, $colors[0]);
for($i = 0; $i < 10; $i++) {
imagesetthickness($image, rand(2, 10));
$line_color = $colors[rand(1, 4)];
imagerectangle($image, rand(-10, 190), rand(-10, 10), rand(-10, 190), rand(40, 60), $line_color);
}
$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
$textcolors = [$black, $white];
$fonts = [dirname(__FILE__).'/fonts/font.ttf'];
$string_length = 5;
$captcha_string = generate_string($permitted_chars, $string_length);
$_SESSION['captcha_text'] = $captcha_string;
for($i = 0; $i < $string_length; $i++) {
$letter_space = 170/$string_length;
$initial = 15;
imagettftext($image, 24, rand(-15, 15), $initial + $i*$letter_space, rand(25, 45), $textcolors[rand(0, 1)], $fonts[array_rand($fonts)], $captcha_string[$i]);
}
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
我当前的验证码验证码:
<?PHP
session_start();
if($_POST['captcha'] != $_SESSION['captcha_text']) die("Sorry, the CAPTCHA code entered was incorrect!");
session_destroy();
?>
解决方案
推荐阅读
- javascript - 反应前端中的 CSRF 令牌不匹配
- mysql - SQL 获取每个城市相对于州的人口百分比
- javascript - 如何在 ar.js 中创建 AR 按钮
- c# - 根据 TextBox 的内容创建文本文件
- flutter - 从颤动的列表视图中删除项目
- r - 如何让 RStudio 服务器识别 R 版本的位置
- c# - 从选择到输入自动填充数据
- node.js - 有没有办法“重新启动”node.js 应用程序的某些部分,同时保留其他部分(数据库连接,一些承诺)?
- android - 如何从 CameraCharacteristics 测量 ISO(传感器灵敏度)
- python - 将 CSV 导入不同的 SQL 表