php验证码相关
0x01.实现验证码
// verification_code.php
<?php
function GetRandStr($length){
//字符组合
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$len = strlen($str)-1;
$randstr = '';
for($i=0;$i<$length;$i++) {
$num=mt_rand(0,$len);
$randstr .=" ".$str[$num];
}
return $randstr;
}
$code = GetRandStr(4);
session_start();
$_SESSION['code'] = str_replace(" ", "", $code);
// var_dump($_SESSION);die();
//var_dump(str_replace(" ", "", GetRandStr(4)));die();
//创建新的true-color图像。此函数返回给定尺寸的空白图像
$im = imageCreateTrueColor(100, 50);
// magecolorallocate — 为一幅图像分配颜色
$white = imageColorAllocate($im, 255, 255, 255);
$black = imageColorAllocate($im, 0, 0, 64);
//区域填充
imageFill($im, 0, 0, $white);
// 两个给定点之间绘制一条线段,用来干扰验证码识别
imageLine($im, 0, rand(20,50), 200, rand(20,50), $black);
//水平绘制字符串
imageString($im, 12, 6, 20, $code, $black);
header('Content-type: image/png');
imagePng($im);
imageDestroy($im);
?>
0x02. 调用验证码以及实现点击更换
<img id="checkpic" onclick="chang_pic();" src='./verification_code.php' />
<script type="text/javascript">
function chang_pic(){document.getElementById('checkpic').src="./verification_code.php?"+Math.random();
}
</script>
<p>点击图片更换验证码</p>
0x03. 后端接受验证码以及判断验证码是否正确
// 这里的判断主要是利用上面验证码中开启了SESSION,然后将验证码写入了SESSION中去判断$_SESSION['code']
<?php
header("Content-Type:text/html;charset=utf-8");
session_start();
$username = $_POST["username"];
$password = $_POST["password"];
$captcha = $_POST["captcha"];
if (!empty($username) && !empty($password) && !empty($captcha)) {
if (strtolower($captcha) == strtolower($_SESSION['code'])) {
if ($username == "admin" && $password == "123456") {
echo "登陆成功!";
}else{
echo "账户或密码错误!";
}
}
else{
echo "验证码错误!";
}
}
else{
echo "请输入账号密码以及验证码!";
}
?>