Another way would be to add a hidden field like this:
<input type="hidden" name="comfirm_email">
And since it's hidden, humans wont see it, but bots will fill it out. :D
I made my own little "big finish":
<?php
SESSION_START();
$_SESSION['captcha'] = '';
$captcha_chars = array('2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','M','N','P','Q','R','S','Y','U','V','W','X','Y','Z');
for($i = 0; $i < 5; $i++){
$rand_char = rand(0, (count($captcha_chars) -1));
$_SESSION['captcha'] .= $captcha_chars[$rand_char];
}
header("Content-type: image/png");
$im = imagecreate(200, 60);
$bg_color = imagecolorallocate($im, 0, 122, 87);
$characters = preg_split("//", $_SESSION['captcha'], -1, PREG_SPLIT_NO_EMPTY);
$x = 5;
foreach($characters as $char){
$y = rand(25,45);
$size = rand(16,28);
$rotation = rand(-17,17);
imagettftext($im, $size, $rotation, $x, $y, imagecolorallocate($im, rand(0,20), rand(0,210), rand(0,20)), 'phpower/fonts/arial.ttf', $char);
imageline($im, $size*rand(0,5), $rotation-rand(0,5), $x+rand(0,3), $y-rand(0,3), imagecolorallocate($im, rand(0,122), rand(0,122), rand(0,122)));
$points = array(rand(0,200), rand(0,200), rand(0,200),rand(0,200), rand(0,200), rand(0,200), rand(0,200), rand(0,200), rand(0,200), rand(0,200));
$vertices = count($points) / 2;
imagepolygon($im, $points, $vertices, imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255)));
$x += 38;
}
imagepng($im);
imagedestroy($im);
?>