PHP: how to make rapidshare type captcha

Posted on 2008-06-18
Last Modified: 2012-06-27
now captcha decoder is very strong and effective.

how to use Image GD to put some object to captcha like rapidshare (is that font or image?)
i mean the cat and dog

i have a captcha ready made. how to modify its code.

class CaptchaSecurityImages {

	var $font = 'monofont.ttf';

	function generateCode($characters) {

		/* list all possible characters, similar looking characters and vowels have been removed */

		$possible = '23456789bcdfghjkmnpqrstvwxyz';

		$code = '';

		$i = 0;

		while ($i < $characters) { 

			$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);



		return $code;


	function CaptchaSecurityImages($width='80',$height='24',$characters='6') {

		$code = $this->generateCode($characters);

		/* font size will be 75% of the image height */

		$font_size = $height * 0.75;

		$image = @imagecreate($width, $height) or die('Cannot initialize new GD image stream');

		/* set the colours */

		$background_color = imagecolorallocate($image, 255, 255, 255);

		$text_color = imagecolorallocate($image, 20, 40, 100);

		$noise_color = imagecolorallocate($image, 100, 120, 180);

		/* generate random dots in background */

		for( $i=0; $i<($width*$height)/3; $i++ ) {

			imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);


		/* generate random lines in background */

		/*for( $i=0; $i<($width*$height)/150; $i++ ) {

			imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);


		/* create textbox and add text */

		$textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');

		$x = ($width - $textbox[4])/2;

		$y = ($height - $textbox[5])/2;

		imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');

		/* output captcha image to browser */

		header('Content-Type: image/jpeg');



		$_SESSION['security_code'] = $code;



$width = isset($_GET['width']) ? $_GET['width'] : '80';

$height = isset($_GET['height']) ? $_GET['height'] : '24';

$characters = isset($_GET['characters']) && $_GET['characters'] > 1 ? $_GET['characters'] : '6';

$captcha = new CaptchaSecurityImages($width,$height,$characters);

Open in new window

Question by:alicca
  • 2

Accepted Solution

afzz earned 500 total points
Comment Utility
Rapidshare captcha is a font. You can/may achieve this
by doing the follwing:

1. If your captcha has 4 chars, put them in an array
2. create another array of 4 chars randomly
3.  print both the arrays in a random order one with a cat font and one with a dog font. The cat font can be the actual captcha.

Sorry, i could not see your code now. Maybe someone else can suggest how you could alter it to achieve the above.

Author Comment

Comment Utility
i got the idea, but may try

Author Closing Comment

Comment Utility

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

It’s a strangely common occurrence that when you send someone their login details for a system, they can’t get in. This article will help you understand why it happens, and what you can do about it.
This article discusses how to create an extensible mechanism for linked drop downs.
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now