Scripts
Captcha
Ik weet dat er al bij scripts een aantal verschillende captcha's staan. Ik heb mijn captcha laten lezen door een OCR en dat leverde niet veel zinnigs of soms niks op ik heb dit ook bij recaptcha getest die waarbij er toch wel aardig wat gelezen word. Je moet zelf nog een map fonts met daarin fonts toevoegen anders werkt het niet. Je kan één font gebruiken maar hoe meer verschillende fonts in die map staan hoe moeilijker het word voor de bot. Voorbeeld: link
index.html
[code]
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Captcha</title>
<script type="text/javascript">
function reload_captcha(id) {
var obj = document.getElementById(id);
var src = obj.src;
var pos = src.indexOf('?');
if (pos >= 0) {
src = src.substr(0, pos);
}
var date = new Date();
obj.src = src + '?v=' + date.getTime();
return false;
}
</script>
<style type="text/css">
img {
border: none;
-moz-border-radius: 15px;
border-radius: 15px;
}
#captcha {
background: #000;
padding: 10px;
width: 400px;
-moz-border-radius: 15px;
border-radius: 15px;
}
.form {
padding: 5px;
margin: 0px;
background: #CCC;
-moz-border-radius: 10px;
border-radius: 10px;
}
</style>
</head>
<body>
<form action="controleren.php" method="post">
<div id="captcha">
<img src="captcha.php" id="Captcha_img"/>
<p class="form">
Type the numbers and letters from the image in the field below.<br />
<input type="text" name="captcha" />
<a href="#" OnClick="javascript:reload_captcha('Captcha_img');"><img src="images/reload.png" width="20" height="20"/></a>
</p>
</div>
<input type="submit" value="Controleer" />
</form>
</body>
</html>
[/code]
captcha.php
<?php
function captcha($string){
header("content-type: image/png");
$height = 100;
$ringen = 10;
$fonts = glob("fonts/*.ttf");
//print_r($fonts);
$width = (strlen($string)+2)*50;
$image = imagecreate($width, $height);
$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 0, 0, $width, $height, $white);
foreach(str_split($string) as $key => $value){
$angle = mt_rand(-45, 45);
if($angle < 0){
$corner1 = 5;
$corner2 = 1;
}else{
$corner1 = 7;
$corner2 = 3;
}
for(;;){
$r = mt_rand(0, 255);
$g = mt_rand(0, 255);
$b = mt_rand(0, 255);
if($r+$g+$b<230 || $r+$g+$b == 0){
break;
}
}
imagefttext($image, mt_rand(30, 50), $angle, ($key+1) * 50 + mt_rand(-10, 10), ($height/2)+15 + mt_rand(-10, 10), imagecolorallocate($image, $r, $g, $b), $fonts[mt_rand(0, count($fonts)-1)], $value);
$r = 0;
$g = 0;
$b = 0;
}
for($i=0;$i<$ringen;$i++){
for(;;){
$r = mt_rand(0, 255);
$g = mt_rand(0, 255);
$b = mt_rand(0, 255);
if($r+$g+$b<230 || $r+$g+$b == 0){
break;
}
}
imageellipse($image, mt_rand(-10, $width-10), mt_rand(-10, $height-10), mt_rand(20, $width+20), mt_rand(20, $height+20), imagecolorallocate($image, $r, $g, $b));
$r = 0;
$g = 0;
$b = 0;
}
imagepng($image);
imagedestroy($image);
}
function random($size){
$chars = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
,"0","1","2","3","4","5","6","7","8","9");
for($i=1;$i<=$size;$i++){
$string .= $chars[mt_rand(0, count($chars)-1)];
}
return $string;
}
session_start();
$string = random(6);
if(isset($_SESSION["captcha"])){
unset($_SESSION['captcha']);
}
$_SESSION["captcha"] = md5($string);
captcha($string);
?>
controleren.php
<?php
session_start();
if($_SERVER['REQUEST_METHOD'] == "POST"){
if(md5(strtoupper($_POST['captcha'])) == $_SESSION['captcha']){
echo "Goed";
}else{
echo "Fout";
}
}else{
echo "Niet verzonden";
}
unset($_SESSION['captcha']);
?>
Reacties
0