Jump to content

Captcha - Space out the letters, and give them different heights so more random


TeddyKiller

Recommended Posts

I have a captcha image.. with noise and random lines. It simply the text gets displayed like..

AhD934

 

That's cluntched together. I want it more spacious: A h D 9 3 4

I would also like each letter to have a different height.

 

I'm not sure how to do it. Here is my captcha generation..

<?php
session_start();
header ("Content-type: image/png");

// String Length
$length = 6;
// Primary Numbers - 0 To 9
$primary = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789';
// Reset strings
$pri = '';

// Primary Number - 0 To 9
$charslength = strlen($primary);
for ($i = 0; $i < $length; $i++) $pri .= substr($primary, rand(0, $charslength - 1), 1);

// Width (px)
$width = 150;
// Height (px)
$height = 30; 

// Background Image
$img_handle = imageCreateFromPNG("../ima/captcha.png");
//Font color
$color = imagecolorallocate($img_handle, 0, 0, 0);

// Random lines
$LineColor = imagecolorallocate($img_handle,172,172,172);
for($i = 0; $i < 2; $i++) {
    $rand_x_1 = rand(0, $width - 1);
    $rand_x_2 = rand(0, $width - 1);
    $rand_y_1 = rand(0, $height - 1);
    $rand_y_2 = rand(0, $height - 1);
    imageline($img_handle, $rand_x_1, $rand_y_1, $rand_x_2, $rand_y_2, $LineColor);
}
// Noise
$PixelColor = imagecolorallocate($img_handle,225,25,25);
for ($c = 0; $c < 150; $c++){
    $x = rand(0, $width - 1);
    $y = rand(0, $height - 1);
    imagesetpixel($img_handle, $x, $y, $PixelColor);
}

// Define the axis
$x = rand(5,25);
$y = rand(0,10);

// Set the image string
imagestring($img_handle, 5, $x, $y, $pri, $color);

// The string put in a session for validation
$_SESSION['ckey'] = $pri;

// Turn into an image
imagepng ($img_handle);
// Destroy the image
imagedestroy ($img_handle);
?>

 

How would I do it?

Thanks

Link to comment
Share on other sites

Thanks

Hmm.. how would I change it so that maybe I can do a recaptcha method.

Word1 Word2

with a space in the middle of course. It'd be a list of prefixes and suffixes I'd imagine? Though how would that work.

 

Then problems with slightly different heights of the letters so it isn't just.. straight across.

Link to comment
Share on other sites

  • 2 weeks later...

i'm not sure what you mean by "recaptcha". Are you talking about refreshing the captcha? If so you will need to integrate javascript into the captcha system - i don't have any details on this for you though lol

 

i'm assuming a jquery .load() function will do the trick, but it's rather sketchy to be modifying the captcha session variable with javascript...

Link to comment
Share on other sites

Thanks

Hmm.. how would I change it so that maybe I can do a recaptcha method.

Word1 Word2

with a space in the middle of course. It'd be a list of prefixes and suffixes I'd imagine? Though how would that work.

 

Then problems with slightly different heights of the letters so it isn't just.. straight across.

 

A recaptcha method would require AJAX my friend. In that case you should hit up the AJAX forums. Unless of course you want a manual refresh of the entire page which would be a bit more lengthy in order to keep previously entered values. In order to have a list of prefixes and suffixes you would have to have an array containing the values or a file to read from that contained the sets of each.

Link to comment
Share on other sites

Thanks

Hmm.. how would I change it so that maybe I can do a recaptcha method.

Word1 Word2

with a space in the middle of course. It'd be a list of prefixes and suffixes I'd imagine? Though how would that work.

 

Then problems with slightly different heights of the letters so it isn't just.. straight across.

 

A recaptcha method would require AJAX my friend. In that case you should hit up the AJAX forums. Unless of course you want a manual refresh of the entire page which would be a bit more lengthy in order to keep previously entered values. In order to have a list of prefixes and suffixes you would have to have an array containing the values or a file to read from that contained the sets of each.

 

don't be mistaken Teddy - the Jquery AJAX is much easier to use.. some of the javascript forums will shun the use of it, but it is much more flexible andmuuuuuuuch quicker to deploy.. ask about the security of the refreshed data

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.