PHP之路——验证码实现

时间:2023-03-09 09:12:58
PHP之路——验证码实现

验证码生成并保存到session

<?php
//开始session
session_start();
//画布大小
$image = imagecreate(100, 40);
$color = imagecolorallocate($image, 255, 255, 255);
// imagefill($image,0, 0, $color); //创建验证码
$code = '';
for($i=0;$i<4;$i++){
$fontsize = 9;
$fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
$x = $i * 25 + 10;
$y = rand(5,10);
$num = (string)rand(0,9);
$code .= $num;
imagestring($image, $fontsize, $x, $y, $num, $fontcolor);
}
//验证码记录到session
$_SESSION['code'] = $code; //增加干扰元素点
for ($i=0; $i <800 ; $i++) {
$color = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
imagesetpixel($image, rand(0,100), rand(0,40), $color);
} //增加干扰线
for ($i=0; $i <5 ; $i++) {
$color = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
imageline($image, rand(10,180), rand(10,180), rand(10,180), rand(10,180), $color);
}
//说明这个是一个图片
header("content-type:image/png");
//输出到浏览器
imagepng($image);
//关闭
imagedestroy($image);

html文件

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<div><img src="yzimg.php" width="100" height="40" id="yzimg" onclick="huan()"></div>
<div><input type="text" id="yzm"></input></div>
<button id="btn">提交</button>
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
function huan(){
var num = Math.random() * 10;
document.getElementById('yzimg').src = 'yzimg.php?r=' + num;
}
$('#btn').click(function(){
$.post(
'/yzm/yz.php',
{'yzm':$('#yzm').val()},
function(data){
if (data == 0) {
alert('YES');
} else {
alert('NO');
huan();
}
}
)
})
</script>
</body>
</html>

验证验证码文件

<?php
//必须开启session
session_start();
if ($_POST['yzm'] != $_SESSION['code']) {
# code...
echo 1;
} else {
echo 0;
}
?>