原创安全的验证码
时间:2007-09-18 来源:lib
要是你载入背景图片,将更安全
/**
* 验证码
* @link http://lib.cublog.cn 转载请注明出处
* @autor 流水孟春 cmpan(at)qq.com
*/
?php
function confirmCode(){
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
// HTTP/1.0
header('Pragma: no-cache');
header("content-type: image/png");
$length = isset($_GET['length']) ? $_GET['length'] : 4; // 校验码长度/字符
// 生成校验码
//function confirmCode($length){
$codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';// 01IO容易混淆,不用
$codeWave = 7; // 验证码上线波动
$imageX = mt_rand(1, 55); // 左边距
$imageY = mt_rand(1, 55) + $codeWave; // 上边距
$imageL = $imageX + $length*10 + 100; // 图片宽度
$imageH = $imageY + 100; // 图片高度
$noiseNum = 300*$length; // 杂点数量
$lineNum = 35; // 干扰线数量
// 建立一幅 $imageL x $imageH 的图像
$image = imagecreate($imageL, $imageH);
$bg = imagecolorallocate($image, 255, 255, 255); // 白色背景
$rectangleColor = imagecolorallocate($image, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); // 边框颜色
$noiseColor = imagecolorallocate($image, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); // 杂点颜色
//imagerectangle($image, 0, 0, $imageL-1, $imageH-1, $rectangleColor); // 添加边框
//加入干扰线
for($i=0; $i$lineNum; $i++){
$lineColor = imagecolorallocate($image, mt_rand(150,225), mt_rand(150,225), mt_rand(150,225)); //干扰线颜色
imageline($image, mt_rand(1, $imageL - 50), mt_rand(1, $imageH - 30),
mt_rand(1, $imageL), mt_rand(1, $imageH), $lineColor);
imagestring($image, 5, mt_rand(1,$imageL), mt_rand(1,$imageH), '*', $lineColor);
}
$code = ''; // 校验码
$codeNX = 0; // 校验码第N个字符的左边距
for ($i = 0; $i$length; $i++) {
$code[$i] = $codeSet[mt_rand(0, 27)];
$codeNX += 10 + mt_rand(0,30);
imagestring($image, 5, $codeNX, $imageY+ mt_rand(-$codeWave, $codeWave),
$code[$i], imagecolorallocate($image, mt_rand(1,180), mt_rand(1,200), mt_rand(1,200))); // 把校验码写入图像
}
$_SESSION['confirmCode'] = join('', $code); // 把校验码保存到session
//加入杂点
for($i=0;$i$noiseNum;$i++)
imagesetpixel($image,mt_rand(1,$imageL),mt_rand(1,$imageH),imagecolorallocate($image,
mt_rand(150,255), mt_rand(150,255), mt_rand(150,255)));
imagepng($image); // 输出图像
imagedestroy($image);
}
==============================================================================
做了一些改进
==========》
?php
/**
* 验证码
*
* @author 流水孟春 cmpan(at)qq.com
* @copyright GPL
*/
if($_GET['act'] == 'confirmCode') {
confirmCode();
}
function confirmCode(){
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
// HTTP/1.0
header('Pragma: no-cache');
header("content-type: image/png");
$length = isset($_GET['length']) ? $_GET['length'] : 4; // 校验码长度/字符
// 生成校验码
//function confirmCode($length){
$codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';// 01IO容易混淆,不用
$codeWave = 7; // 验证码上线波动
$imageX = mt_rand(1, 55); // 左边距
$imageY = mt_rand(1, 40) + $codeWave; // 上边距
$imageL = $imageX + $length*10 + 100; // 图片宽度
$imageH = $imageY + 30; // 图片高度
$noiseNum = 300*$length; // 杂点数量
$lineNum = 50; // 干扰线数量
// 建立一幅 $imageL x $imageH 的图像
$image = imagecreatetruecolor($imageL, $imageH);
$bgImg = 'images/confirumcode/background/background' . mt_rand(1,8) . '.jpg';
$bg = imagecreatefromjpeg($bgImg);
imagecopyresampled($image, $bg, 0, 0, mt_rand(0,10), mt_rand(0,10), $imageL, $imageH, 180, 70);
//imagerectangle($image, 0, 0, $imageL-1, $imageH-1, $rectangleColor); // 添加边框
$code = ''; // 校验码
$codeNX = 0; // 校验码第N个字符的左边距
for ($i = 0; $i$length; $i++) {
$code[$i] = $codeSet[mt_rand(0, 27)];
$codeNX += 10 + mt_rand(0,30);
imagestring($image, 5, $codeNX, $imageY+ mt_rand(0, $codeWave),
$code[$i], imagecolorallocate($image, mt_rand(1,100), mt_rand(1,100), mt_rand(1,100))); // 把校验码写入图像
}
$_SESSION['confirmCode'] = join('', $code); // 把校验码保存到session
imagepng($image); // 输出图像
imagedestroy($image);
}
/**
* 验证码
* @link http://lib.cublog.cn 转载请注明出处
* @autor 流水孟春 cmpan(at)qq.com
*/
?php
function confirmCode(){
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
// HTTP/1.0
header('Pragma: no-cache');
header("content-type: image/png");
$length = isset($_GET['length']) ? $_GET['length'] : 4; // 校验码长度/字符
// 生成校验码
//function confirmCode($length){
$codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';// 01IO容易混淆,不用
$codeWave = 7; // 验证码上线波动
$imageX = mt_rand(1, 55); // 左边距
$imageY = mt_rand(1, 55) + $codeWave; // 上边距
$imageL = $imageX + $length*10 + 100; // 图片宽度
$imageH = $imageY + 100; // 图片高度
$noiseNum = 300*$length; // 杂点数量
$lineNum = 35; // 干扰线数量
// 建立一幅 $imageL x $imageH 的图像
$image = imagecreate($imageL, $imageH);
$bg = imagecolorallocate($image, 255, 255, 255); // 白色背景
$rectangleColor = imagecolorallocate($image, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); // 边框颜色
$noiseColor = imagecolorallocate($image, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); // 杂点颜色
//imagerectangle($image, 0, 0, $imageL-1, $imageH-1, $rectangleColor); // 添加边框
//加入干扰线
for($i=0; $i$lineNum; $i++){
$lineColor = imagecolorallocate($image, mt_rand(150,225), mt_rand(150,225), mt_rand(150,225)); //干扰线颜色
imageline($image, mt_rand(1, $imageL - 50), mt_rand(1, $imageH - 30),
mt_rand(1, $imageL), mt_rand(1, $imageH), $lineColor);
imagestring($image, 5, mt_rand(1,$imageL), mt_rand(1,$imageH), '*', $lineColor);
}
$code = ''; // 校验码
$codeNX = 0; // 校验码第N个字符的左边距
for ($i = 0; $i$length; $i++) {
$code[$i] = $codeSet[mt_rand(0, 27)];
$codeNX += 10 + mt_rand(0,30);
imagestring($image, 5, $codeNX, $imageY+ mt_rand(-$codeWave, $codeWave),
$code[$i], imagecolorallocate($image, mt_rand(1,180), mt_rand(1,200), mt_rand(1,200))); // 把校验码写入图像
}
$_SESSION['confirmCode'] = join('', $code); // 把校验码保存到session
//加入杂点
for($i=0;$i$noiseNum;$i++)
imagesetpixel($image,mt_rand(1,$imageL),mt_rand(1,$imageH),imagecolorallocate($image,
mt_rand(150,255), mt_rand(150,255), mt_rand(150,255)));
imagepng($image); // 输出图像
imagedestroy($image);
}
==============================================================================
做了一些改进
==========》
?php
/**
* 验证码
*
* @author 流水孟春 cmpan(at)qq.com
* @copyright GPL
*/
if($_GET['act'] == 'confirmCode') {
confirmCode();
}
function confirmCode(){
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
// HTTP/1.0
header('Pragma: no-cache');
header("content-type: image/png");
$length = isset($_GET['length']) ? $_GET['length'] : 4; // 校验码长度/字符
// 生成校验码
//function confirmCode($length){
$codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';// 01IO容易混淆,不用
$codeWave = 7; // 验证码上线波动
$imageX = mt_rand(1, 55); // 左边距
$imageY = mt_rand(1, 40) + $codeWave; // 上边距
$imageL = $imageX + $length*10 + 100; // 图片宽度
$imageH = $imageY + 30; // 图片高度
$noiseNum = 300*$length; // 杂点数量
$lineNum = 50; // 干扰线数量
// 建立一幅 $imageL x $imageH 的图像
$image = imagecreatetruecolor($imageL, $imageH);
$bgImg = 'images/confirumcode/background/background' . mt_rand(1,8) . '.jpg';
$bg = imagecreatefromjpeg($bgImg);
imagecopyresampled($image, $bg, 0, 0, mt_rand(0,10), mt_rand(0,10), $imageL, $imageH, 180, 70);
//imagerectangle($image, 0, 0, $imageL-1, $imageH-1, $rectangleColor); // 添加边框
$code = ''; // 校验码
$codeNX = 0; // 校验码第N个字符的左边距
for ($i = 0; $i$length; $i++) {
$code[$i] = $codeSet[mt_rand(0, 27)];
$codeNX += 10 + mt_rand(0,30);
imagestring($image, 5, $codeNX, $imageY+ mt_rand(0, $codeWave),
$code[$i], imagecolorallocate($image, mt_rand(1,100), mt_rand(1,100), mt_rand(1,100))); // 把校验码写入图像
}
$_SESSION['confirmCode'] = join('', $code); // 把校验码保存到session
imagepng($image); // 输出图像
imagedestroy($image);
}
相关阅读 更多 +
排行榜 更多 +