Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7740905
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 1, 20262026-06-01T08:53:44+00:00 2026-06-01T08:53:44+00:00

I am having a classes which have function to make random text and captcha

  • 0

I am having a classes which have function to make random text and captcha image based on that random text all in one function. What I want is to make them apart. I mean I want to have different function which will make random text, I would save it in cookie, and then the captcha making function should run. I want to have function like this:

$string = make_text(); //random text

setcookie($string); // will write the cookie

make_captcha($string);

following is the class from where we can make it:

class KCAPTCHA{

// generates keystring and image
function KCAPTCHA(){

    require(dirname(__FILE__).'/kcaptcha_config.php');
    $fonts=array();
    $fontsdir_absolute=dirname(__FILE__).'/'.$fontsdir;
    if ($handle = opendir($fontsdir_absolute)) {
        while (false !== ($file = readdir($handle))) {
            if (preg_match('/\.png$/i', $file)) {
                $fonts[]=$fontsdir_absolute.'/'.$file;
            }
        }
        closedir($handle);
    }   

    $alphabet_length=strlen($alphabet);

    do{
        // generating random keystring
        while(true){
            $this->keystring='';
            for($i=0;$i<$length;$i++){
                $this->keystring.=$allowed_symbols{mt_rand(0,strlen($allowed_symbols)-1)};
            }
            if(!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp|ww/', $this->keystring)) break;
        }

        $font_file=$fonts[mt_rand(0, count($fonts)-1)];
        $font=imagecreatefrompng($font_file);
        imagealphablending($font, true);

        $fontfile_width=imagesx($font);
        $fontfile_height=imagesy($font)-1;

        $font_metrics=array();
        $symbol=0;
        $reading_symbol=false;

        // loading font
        for($i=0;$i<$fontfile_width && $symbol<$alphabet_length;$i++){
            $transparent = (imagecolorat($font, $i, 0) >> 24) == 127;

            if(!$reading_symbol && !$transparent){
                $font_metrics[$alphabet{$symbol}]=array('start'=>$i);
                $reading_symbol=true;
                continue;
            }

            if($reading_symbol && $transparent){
                $font_metrics[$alphabet{$symbol}]['end']=$i;
                $reading_symbol=false;
                $symbol++;
                continue;
            }
        }

        $img=imagecreatetruecolor($width, $height);
        imagealphablending($img, true);
        $white=imagecolorallocate($img, 255, 255, 255);
        $black=imagecolorallocate($img, 0, 0, 0);

        imagefilledrectangle($img, 0, 0, $width-1, $height-1, $white);

        // draw text
        $x=1;
        $odd=mt_rand(0,1);
        if($odd==0) $odd=-1;
        for($i=0;$i<$length;$i++){
            $m=$font_metrics[$this->keystring{$i}];

            $y=(($i%2)*$fluctuation_amplitude - $fluctuation_amplitude/2)*$odd
                + mt_rand(-round($fluctuation_amplitude/3), round($fluctuation_amplitude/3))
                + ($height-$fontfile_height)/2;

            if($no_spaces){
                $shift=0;
                if($i>0){
                    $shift=10000;
                    for($sy=3;$sy<$fontfile_height-10;$sy+=1){
                        for($sx=$m['start']-1;$sx<$m['end'];$sx+=1){
                            $rgb=imagecolorat($font, $sx, $sy);
                            $opacity=$rgb>>24;
                            if($opacity<127){
                                $left=$sx-$m['start']+$x;
                                $py=$sy+$y;
                                if($py>$height) break;
                                for($px=min($left,$width-1);$px>$left-200 && $px>=0;$px-=1){
                                    $color=imagecolorat($img, $px, $py) & 0xff;
                                    if($color+$opacity<170){ // 170 - threshold
                                        if($shift>$left-$px){
                                            $shift=$left-$px;
                                        }
                                        break;
                                    }
                                }
                                break;
                            }
                        }
                    }
                    if($shift==10000){
                        $shift=mt_rand(4,6);
                    }

                }
            }else{
                $shift=1;
            }
            imagecopy($img, $font, $x-$shift, $y, $m['start'], 1, $m['end']-$m['start'], $fontfile_height);
            $x+=$m['end']-$m['start']-$shift;
        }
    }while($x>=$width-10); // while not fit in canvas

    //noise
    $white=imagecolorallocate($font, 255, 255, 255);
    $black=imagecolorallocate($font, 0, 0, 0);
    for($i=0;$i<(($height-30)*$x)*$white_noise_density;$i++){
        imagesetpixel($img, mt_rand(0, $x-1), mt_rand(10, $height-15), $white);
    }
    for($i=0;$i<(($height-30)*$x)*$black_noise_density;$i++){
        imagesetpixel($img, mt_rand(0, $x-1), mt_rand(10, $height-15), $black);
    }


    $center=$x/2;

    // credits. To remove, see configuration file
    $img2=imagecreatetruecolor($width, $height+($show_credits?12:0));
    $foreground=imagecolorallocate($img2, $foreground_color[0], $foreground_color[1], $foreground_color[2]);
    $background=imagecolorallocate($img2, $background_color[0], $background_color[1], $background_color[2]);
    imagefilledrectangle($img2, 0, 0, $width-1, $height-1, $background);        
    imagefilledrectangle($img2, 0, $height, $width-1, $height+12, $foreground);
    $credits=empty($credits)?$_SERVER['HTTP_HOST']:$credits;
    imagestring($img2, 2, $width/2-imagefontwidth(2)*strlen($credits)/2, $height-2, $credits, $background);

    // periods
    $rand1=mt_rand(750000,1200000)/10000000;
    $rand2=mt_rand(750000,1200000)/10000000;
    $rand3=mt_rand(750000,1200000)/10000000;
    $rand4=mt_rand(750000,1200000)/10000000;
    // phases
    $rand5=mt_rand(0,31415926)/10000000;
    $rand6=mt_rand(0,31415926)/10000000;
    $rand7=mt_rand(0,31415926)/10000000;
    $rand8=mt_rand(0,31415926)/10000000;
    // amplitudes
    $rand9=mt_rand(330,420)/110;
    $rand10=mt_rand(330,450)/100;

    //wave distortion

    for($x=0;$x<$width;$x++){
        for($y=0;$y<$height;$y++){
            $sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1;
            $sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10;

            if($sx<0 || $sy<0 || $sx>=$width-1 || $sy>=$height-1){
                continue;
            }else{
                $color=imagecolorat($img, $sx, $sy) & 0xFF;
                $color_x=imagecolorat($img, $sx+1, $sy) & 0xFF;
                $color_y=imagecolorat($img, $sx, $sy+1) & 0xFF;
                $color_xy=imagecolorat($img, $sx+1, $sy+1) & 0xFF;
            }

            if($color==255 && $color_x==255 && $color_y==255 && $color_xy==255){
                continue;
            }else if($color==0 && $color_x==0 && $color_y==0 && $color_xy==0){
                $newred=$foreground_color[0];
                $newgreen=$foreground_color[1];
                $newblue=$foreground_color[2];
            }else{
                $frsx=$sx-floor($sx);
                $frsy=$sy-floor($sy);
                $frsx1=1-$frsx;
                $frsy1=1-$frsy;

                $newcolor=(
                    $color*$frsx1*$frsy1+
                    $color_x*$frsx*$frsy1+
                    $color_y*$frsx1*$frsy+
                    $color_xy*$frsx*$frsy);

                if($newcolor>255) $newcolor=255;
                $newcolor=$newcolor/255;
                $newcolor0=1-$newcolor;

                $newred=$newcolor0*$foreground_color[0]+$newcolor*$background_color[0];
                $newgreen=$newcolor0*$foreground_color[1]+$newcolor*$background_color[1];
                $newblue=$newcolor0*$foreground_color[2]+$newcolor*$background_color[2];
            }

            imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue));
        }
    }

    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
    header('Cache-Control: no-store, no-cache, must-revalidate'); 
    header('Cache-Control: post-check=0, pre-check=0', FALSE); 
    header('Pragma: no-cache');
    if(function_exists("imagejpeg")){
        header("Content-Type: image/jpeg");
        imagejpeg($img2, null, $jpeg_quality);
    }else if(function_exists("imagegif")){
        header("Content-Type: image/gif");
        imagegif($img2);
    }else if(function_exists("imagepng")){
        header("Content-Type: image/x-png");
        imagepng($img2);
    }
}

Thank You

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-01T08:53:46+00:00Added an answer on June 1, 2026 at 8:53 am

    First, it’s bad idea to store captcha in cookies because right captcha can be easily read from cookies by bot. Better use session or some storage instead.

    Second, there are some variables initialized in kcaptcha_config.php file, you need to move required variables initialization to your functions

    Get text function:

    function make_text()
    {
        // generating random keystring
        while(true){
            $keystring='';
            for($i=0;$i<$length;$i++){
                $keystring.=$allowed_symbols{mt_rand(0,strlen($allowed_symbols)-1)};
            }
            if(!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp|ww/', $keystring)) break;
        }
    
        return $keystring;
    }
    

    $length and $allowed_symbols are defined in kcaptcha_config.php

    I did not check all the variables in next function, but i’m sure there will be a lot of errors.

    function make_captcha($keystring){
    
      $fonts=array();
      $fontsdir_absolute=dirname(__FILE__).'/'.$fontsdir;
      if ($handle = opendir($fontsdir_absolute)) {
          while (false !== ($file = readdir($handle))) {
              if (preg_match('/\.png$/i', $file)) {
                  $fonts[]=$fontsdir_absolute.'/'.$file;
              }
          }
          closedir($handle);
      }
    
      $alphabet_length=strlen($alphabet);
    
      do{
    
          $font_file=$fonts[mt_rand(0, count($fonts)-1)];
          $font=imagecreatefrompng($font_file);
          imagealphablending($font, true);
    
          $fontfile_width=imagesx($font);
          $fontfile_height=imagesy($font)-1;
    
          $font_metrics=array();
          $symbol=0;
          $reading_symbol=false;
    
          // loading font
          for($i=0;$i<$fontfile_width && $symbol<$alphabet_length;$i++){
              $transparent = (imagecolorat($font, $i, 0) >> 24) == 127;
    
              if(!$reading_symbol && !$transparent){
                  $font_metrics[$alphabet{$symbol}]=array('start'=>$i);
                  $reading_symbol=true;
                  continue;
              }
    
              if($reading_symbol && $transparent){
                  $font_metrics[$alphabet{$symbol}]['end']=$i;
                  $reading_symbol=false;
                  $symbol++;
                  continue;
              }
          }
    
          $img=imagecreatetruecolor($width, $height);
          imagealphablending($img, true);
          $white=imagecolorallocate($img, 255, 255, 255);
          $black=imagecolorallocate($img, 0, 0, 0);
    
          imagefilledrectangle($img, 0, 0, $width-1, $height-1, $white);
    
          // draw text
          $x=1;
          $odd=mt_rand(0,1);
          if($odd==0) $odd=-1;
          for($i=0;$i<$length;$i++){
              $m=$font_metrics[$keystring{$i}];
    
              $y=(($i%2)*$fluctuation_amplitude - $fluctuation_amplitude/2)*$odd
                  + mt_rand(-round($fluctuation_amplitude/3), round($fluctuation_amplitude/3))
                  + ($height-$fontfile_height)/2;
    
              if($no_spaces){
                  $shift=0;
                  if($i>0){
                      $shift=10000;
                      for($sy=3;$sy<$fontfile_height-10;$sy+=1){
                          for($sx=$m['start']-1;$sx<$m['end'];$sx+=1){
                              $rgb=imagecolorat($font, $sx, $sy);
                              $opacity=$rgb>>24;
                              if($opacity<127){
                                  $left=$sx-$m['start']+$x;
                                  $py=$sy+$y;
                                  if($py>$height) break;
                                  for($px=min($left,$width-1);$px>$left-200 && $px>=0;$px-=1){
                                      $color=imagecolorat($img, $px, $py) & 0xff;
                                      if($color+$opacity<170){ // 170 - threshold
                                          if($shift>$left-$px){
                                              $shift=$left-$px;
                                          }
                                          break;
                                      }
                                  }
                                  break;
                              }
                          }
                      }
                      if($shift==10000){
                          $shift=mt_rand(4,6);
                      }
    
                  }
              }else{
                  $shift=1;
              }
              imagecopy($img, $font, $x-$shift, $y, $m['start'], 1, $m['end']-$m['start'], $fontfile_height);
              $x+=$m['end']-$m['start']-$shift;
          }
      }while($x>=$width-10); // while not fit in canvas
    
      //noise
      $white=imagecolorallocate($font, 255, 255, 255);
      $black=imagecolorallocate($font, 0, 0, 0);
      for($i=0;$i<(($height-30)*$x)*$white_noise_density;$i++){
          imagesetpixel($img, mt_rand(0, $x-1), mt_rand(10, $height-15), $white);
      }
      for($i=0;$i<(($height-30)*$x)*$black_noise_density;$i++){
          imagesetpixel($img, mt_rand(0, $x-1), mt_rand(10, $height-15), $black);
      }
    
    
      $center=$x/2;
    
      // credits. To remove, see configuration file
      $img2=imagecreatetruecolor($width, $height+($show_credits?12:0));
      $foreground=imagecolorallocate($img2, $foreground_color[0], $foreground_color[1], $foreground_color[2]);
      $background=imagecolorallocate($img2, $background_color[0], $background_color[1], $background_color[2]);
      imagefilledrectangle($img2, 0, 0, $width-1, $height-1, $background);
      imagefilledrectangle($img2, 0, $height, $width-1, $height+12, $foreground);
      $credits=empty($credits)?$_SERVER['HTTP_HOST']:$credits;
      imagestring($img2, 2, $width/2-imagefontwidth(2)*strlen($credits)/2, $height-2, $credits, $background);
    
      // periods
      $rand1=mt_rand(750000,1200000)/10000000;
      $rand2=mt_rand(750000,1200000)/10000000;
      $rand3=mt_rand(750000,1200000)/10000000;
      $rand4=mt_rand(750000,1200000)/10000000;
      // phases
      $rand5=mt_rand(0,31415926)/10000000;
      $rand6=mt_rand(0,31415926)/10000000;
      $rand7=mt_rand(0,31415926)/10000000;
      $rand8=mt_rand(0,31415926)/10000000;
      // amplitudes
      $rand9=mt_rand(330,420)/110;
      $rand10=mt_rand(330,450)/100;
    
      //wave distortion
    
      for($x=0;$x<$width;$x++){
          for($y=0;$y<$height;$y++){
              $sx=$x+(sin($x*$rand1+$rand5)+sin($y*$rand3+$rand6))*$rand9-$width/2+$center+1;
              $sy=$y+(sin($x*$rand2+$rand7)+sin($y*$rand4+$rand8))*$rand10;
    
              if($sx<0 || $sy<0 || $sx>=$width-1 || $sy>=$height-1){
                  continue;
              }else{
                  $color=imagecolorat($img, $sx, $sy) & 0xFF;
                  $color_x=imagecolorat($img, $sx+1, $sy) & 0xFF;
                  $color_y=imagecolorat($img, $sx, $sy+1) & 0xFF;
                  $color_xy=imagecolorat($img, $sx+1, $sy+1) & 0xFF;
              }
    
              if($color==255 && $color_x==255 && $color_y==255 && $color_xy==255){
                  continue;
              }else if($color==0 && $color_x==0 && $color_y==0 && $color_xy==0){
                  $newred=$foreground_color[0];
                  $newgreen=$foreground_color[1];
                  $newblue=$foreground_color[2];
              }else{
                  $frsx=$sx-floor($sx);
                  $frsy=$sy-floor($sy);
                  $frsx1=1-$frsx;
                  $frsy1=1-$frsy;
    
                  $newcolor=(
                      $color*$frsx1*$frsy1+
                      $color_x*$frsx*$frsy1+
                      $color_y*$frsx1*$frsy+
                      $color_xy*$frsx*$frsy);
    
                  if($newcolor>255) $newcolor=255;
                  $newcolor=$newcolor/255;
                  $newcolor0=1-$newcolor;
    
                  $newred=$newcolor0*$foreground_color[0]+$newcolor*$background_color[0];
                  $newgreen=$newcolor0*$foreground_color[1]+$newcolor*$background_color[1];
                  $newblue=$newcolor0*$foreground_color[2]+$newcolor*$background_color[2];
              }
    
              imagesetpixel($img2, $x, $y, imagecolorallocate($img2, $newred, $newgreen, $newblue));
          }
      }
    
      header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
      header('Cache-Control: no-store, no-cache, must-revalidate');
      header('Cache-Control: post-check=0, pre-check=0', FALSE);
      header('Pragma: no-cache');
      if(function_exists("imagejpeg")){
          header("Content-Type: image/jpeg");
          imagejpeg($img2, null, $jpeg_quality);
      }else if(function_exists("imagegif")){
          header("Content-Type: image/gif");
          imagegif($img2);
      }else if(function_exists("imagepng")){
          header("Content-Type: image/x-png");
          imagepng($img2);
      }
    }
    

    Hope i helped you.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

having this two classes I always have a doubt of which is the best
I want to have a div that animates the currently active image out of
I'm having a problem sorting my derived classes with the STL sort function. Example
I have a class that is a manager sort of class. One of it's
I have been tasked with converting several php classes into java classes, which is
I have some code which is using delegate method of jquery. e.g.: $(document).delegate('.forImg','dblclick',function(event){. .
I've been having some problems trying to implement an overloaded << operator function that
I am having a class which uses the XmlReader and XmlReaderSettings classes in C#
I'm having trouble with classes in haskell. Basically, I have an algorithm (a weird
I'm having a little trouble organizing my error messages for two interacting classes. One

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.