AGB     Downloads     Impresum    Sitemap   
      
Keine Mobilversion verfügbar; Nur Desktopversion!

Captcha Klasse

PHP 5.6 Captcha Class

 

Download Script + Bilder + Schriften: >> hier <<

 

Die Schrift in dem Captcha-Code hat nicht nur den Sinn von Copyright sondern auch eine Irreführung der Robots!

 

Captcha.class.php - einfach makieren und kopieren
  1. <?php header('Content-type: text/html; charset=utf-8');
  2. /*
  3. ----------------------------------------------------------------------------------------------------
  4. script name:      Captcha.class.php
  5. script autor:     Johann Glechner GJweb e.U.
  6. aenderung von:    Johann Glechner
  7. erstellt am:      20.10.2014
  8. geaendert am:     20.10.2014
  9. letzte aenderung:
  10. 20.10.2014  script erstellt
  11. ----------------------------------------------------------------------------------------------------
  12. script-history:
  13. 010 captcha starten
  14.   010_010 variable
  15.   010_020 construct
  16.   010_030 zufallsstring erstellen
  17.   010_040 zufallscode fuer bestimmte session id erstellen
  18.   010_100 bild mit zufallscode erstellen
  19.   010_900 captcha pruefen
  20. ----------------------------------------------------------------------------------------------------
  21.  
  22. voraussetzung
  23. mindestens php 5.2
  24.  
  25. ----------------------------------------------------------------------------------------------------
  26.  
  27. captcha validierung
  28. 1 = gross- und kleinschreibung wird geprueft
  29. 2 = gross- und kleinschreibung ist egal
  30.  
  31. if(Captcha::Validate($_POST['captcha_code'], "1 = id des bildes", "1 oder 2") == false)
  32.  
  33. ----------------------------------------------------------------------------------------------------
  34.  
  35. captcha bild laden mit der datei "Captcha_Image.php". die id ist nur dann wichtig, wenn mehrere captcha bilder generiert werden muessen.
  36. wird bei der id eine andere zahl eingegeben, muss auch bei der validierung diese zahl eingegeben werden (erste zahl).
  37.  
  38. <img src="Captcha_Image.php?id=1" alt="Captcha powerd by GJweb www.gjweb.at" title="Captcha powerd by GJweb www.gjweb.at" />
  39.  
  40. >>>> alt und title copyright duerfen nicht entfernt werden. <<<<
  41. meine aktuelle captcha ist ein wenig anders und "ioncube" verschluesselt. wer diese will muss mich kontaktieren und dafuer bezahlen.
  42. auf dem server muss man einen "ioncube loader" haben. GJweb bietet diese (server oder webspace) zum mieten an!
  43.  
  44. ----------------------------------------------------------------------------------------------------
  45.  
  46. starten der class und session fuer "DUMMYS"
  47. ich arbeite nur in OOP. fuer alle, die nicht verstehen oder nicht wissen was OOP ist: lasst die finger davon!
  48. ich verwende diese klasse in verbindung mit einer datenbank, welche die ip und die loggversuche mitspeichert, inklusive "Token". das schaut dann so aus:
  49.  
  50. "class Captcha extends Token"
  51.  
  52. "class Token extends AbfrageSQL"
  53.  
  54. das zu erklaeren wuerde den rahmen sprengen und die sicherheit meines cms "gjOps" gefaehrden!
  55.  
  56. alle klassen sind von mir selber gescriptet, keine kopien oder sonstige abgeschaute schnipsel "vom experten GJweb fuer experten"
  57. sollte jemand meinen, das schaut aber aehnlich aus wie bei ihm, dann kann ich nur sagen, dass gewisse ablaeufe und funktionen überall gleich und nur so zu programmieren sind.
  58. sollte jemand denken dass sein copyrigt verletzt worden ist, dann kann ich nur sagen: alle baecker backen ihre semmeln mit dem gleichen teig und sie schmecken trotzdem unterschiedlich.
  59. das gleiche gilt auch beim scripten: die befehle sind in jedem php gleich!
  60.  
  61.  
  62.   if (! isset($_SESSION["session_started"]))
  63.   {
  64.   session_start();
  65.   $_SESSION["session_started"] = true;
  66.   }
  67.  
  68.   function __autoload($class)
  69.   {
  70.     if(file_exists("class/".$class.".class.php"))
  71.     {
  72.     require_once ('class/'.$class.'.class.php');
  73.     }
  74.   }
  75. ----------------------------------------------------------------------------------------------------
  76.  
  77. kein einziges script oder virus programm war bisher in der lage diesen captcha auszulesen. Ausnahme: der captcha wurde ausgelagert und einem unwissenden "DUMMY" zur eingabe weitergereicht.
  78. fügt man aber eine "TOKEN" hinzu (captcha + token) ist auch das nicht mehr moeglich!
  79.  
  80. zu 99,9% ist dieser captcha sicher. 0,1% sind alle jene die es trotzdem schaffen - denn im internet ist NICHTS 100% SICHER!
  81.  
  82. ----------------------------------------------------------------------------------------------------
  83. */
  84. /* 010  captcha starten ANFANG */
  85. define('GJ_CAPTCHA_SESSION_ID', 'captcha_class');
  86.  
  87. class Captcha
  88. {
  89.  
  90.   /* 010_010  variable  ANFANG */
  91.   var $GrossKlein;
  92.   var $font;
  93.   var $bgimg;
  94.   var $maxlen;
  95.   var $font_size_max;
  96.   var $font_size_min;
  97.   var $ZeichenSet;
  98.   var $width;
  99.   var $height;
  100.   var $fontWassermarke;
  101.   var $font_size_watermark_1;
  102.   var $font_size_watermark_2;
  103.   var $watermark_1;
  104.   var $watermark_2;
  105.   var $font_minus_grad;
  106.   var $font_plus_grad;
  107.   var $linien_anzahl;
  108.   var $Code;
  109.   /* 010_010  variable  ENDE */
  110.  
  111. /* ---------------------------------------------------------------------------------------------------- */
  112.  
  113.   /* 010_020  construct ANFANG */
  114.   public function __construct()
  115.   {
  116.   $this->GrossKlein             = 1;  /* 1 = gross- und kleinschreibung exakt eingeben, 2 = egal ob gross- oder kleinschreibung */
  117.   $this->font                   = 'Akashi'; /* eigene schrift integrieren code */
  118.   $this->bgimg                  = 'Akashi'; /* passendes hintergrundbild fuer die fontschrift sollte immer die gleiche schrift fuer die hintergrundschift des images benutzen */
  119.   $this->maxlen                 = 5;  /* wieviele zeichen werden angezeigt im captcha */
  120.   $this->font_size_max          = 50; /* maximale schriftgroesse */
  121.   $this->font_size_min          = 35; /* minimale schriftgroesse */
  122.   $this->ZeichenSet             = '#?+ABCDEFGHJKLMNPQRSTUVWXYZ#?+123456789#?+abcdefghijkmnpqrstuvwxyz#?+123456789#?+';  /* zeichen die in den captchacode eingebaut werden */
  123.   $this->width                  = 350;  /* captcha bildbreite standard 350 */
  124.   $this->height                 = 150;  /* captcha bildhoehe standard 150 */
  125.   $this->fontWassermarke        = 'class/captcha/01_Standard.ttf';  /* eigene schrift integrieren mit wassermarke */
  126.   $this->font_size_watermark_1  = 15; /* schriftgroesse wassermarken */
  127.   $this->font_size_watermark_2  = 12; /* schriftgroesse wassermarken */
  128.   $this->watermark_1            = 'GJweb e.U.©'; /* wassermarke links oben */
  129.   $this->watermark_2            = 'Captcha-Code'; /* wassermarke links unten senkrecht */
  130.   $this->font_minus_grad        = '-35';  /* zeichen in minus drehen */
  131.   $this->font_plus_grad         = '35'; /* zeichen ins plus drehen */
  132.   $this->linien_anzahl          = 10; /* anzahl der linien die eingebaut werden sollen */
  133.   $this->Code                   = ''; /* bildercode */
  134.   }
  135.   /* 010_020  construct ENDE */
  136.  
  137. /* ---------------------------------------------------------------------------------------------------- */
  138.  
  139.   /* 010_030  zufallsstring erstellen ANFANG */
  140.   private function zufallString($zeichenlaenge)
  141.   {
  142.   $str = '';
  143.     while (strlen($str)<$zeichenlaenge)
  144.     {
  145.     $str .= substr($this->ZeichenSet, (rand()%(strlen($this->ZeichenSet))), 1);
  146.     }
  147.   return($str);
  148.   }
  149.   /* 010_030  zufallsstring erstellen ENDE */
  150.  
  151. /* ---------------------------------------------------------------------------------------------------- */
  152.  
  153.   /* 010_040  zufallscode fuer bestimmte session id erstellen ANFANG */
  154.   function ZufallCode()
  155.   {
  156.   /* session Id */
  157.   $CaptchaID = (is_numeric($_GET['id']) ? $_GET['id'] : '1');
  158.  
  159.   /* zufallscode generieren */
  160.   $this->Code = $this->zufallString($this->maxlen);
  161.  
  162.   /* session schreiben */
  163.   $_SESSION[GJ_CAPTCHA_SESSION_ID][$CaptchaID] = $this->Code;
  164.   }
  165.   /* 010_040  zufallscode fuer bestimmte session id erstellen ENDE */
  166.  
  167. /* ---------------------------------------------------------------------------------------------------- */
  168.  
  169.   /* 010_100  bild mit zufallscode erstellen  ANFANG */
  170.   function Create($font, $bgimg)
  171.   {
  172.     if(isset($font) &&  $font!="")    {$this->font  = $font;}
  173.     if(isset($bgimg)  &&  $bgimg!="") {$this->bgimg = $bgimg;}
  174.  
  175.   /* zufallscode generieren */
  176.   $this->ZufallCode();
  177.  
  178.   /* hintergrundbild einlesen */
  179.   $imageInfos = GetImageSize('class/captcha/'.$this->bgimg.'.jpg');
  180.   $imageAlt   = ImageCreateFromJPEG('class/captcha/'.$this->bgimg.'.jpg');
  181.  
  182.   /* hintergrundbild groesse anpassen */
  183.   $img      = ImageCreateTrueColor($this->width, $this->height);
  184.   ImageCopyResized($img,$imageAlt,0,0,0,0,$this->width,$this->height,$imageInfos[0],$imageInfos[1]);
  185.  
  186.   /* zeichen ermitteln */
  187.   $spacing = (($this->width - 30) / $this->maxlen);
  188.   $t_y_min = min($this->height, $this->font_size_max);
  189.   $t_y   = rand($t_y_min / 1.0, $t_y_min / 2.0) + $spacing;
  190.   $t_x   = 30;
  191.   $a     = 0;
  192.  
  193.     /* jedes zeichen einzeln auf das bild schreiben  */
  194.     for ($i = 1; $i <=$this->maxlen; $i++)
  195.     {
  196.     /* zeichen von minusgrad bis plusgrad drehen */
  197.     $angle = rand($this->font_minus_grad,$this->font_plus_grad);
  198.     /* zeichenfarbe zufall */
  199.     $color = ImageColorAllocate($img, rand(50,210), rand(50,210), rand(50,210));
  200.  
  201.     ImageTTFText($img, mt_rand($this->font_size_min,$this->font_size_max), $angle, $t_x, $t_y, $color, 'class/captcha/'.$this->font.'.ttf', $this->Code{$a});
  202.  
  203.     $t_x = $t_x + $spacing;
  204.     $a++;
  205.     }
  206.  
  207.     /* linien links nach unten auf das bild zeichnen  ANFANG */
  208.     for ($i = 1; $i <= $this->linien_anzahl; $i++)
  209.     {
  210.     /* linienfarbe zufall */
  211.     $line_color = ImageColorAllocate($img, rand(100,255), rand(100,255), rand(100,255));
  212.  
  213.     /* liniendicke zufall 1 - 3 pixel */
  214.     imagesetthickness($img, mt_rand(1,3));
  215.  
  216.     /* linie start- und endposition zufall */
  217.     $x1 = mt_rand(15,$this->width / 2);
  218.     $y1 = mt_rand(20,$this->height / 2);
  219.     $x2 = mt_rand(15,$this->width - 8);
  220.     $y2 = mt_rand($y1,$this->height - 8);
  221.  
  222.     imageline( $img, $x1, $y1, $x2, $y2, $line_color );
  223.     }
  224.     /* linien links nach unten auf das bild zeichnen  ENDE */
  225.  
  226.     /* linien rechts nach unten auf das bild zeichnen ANFANG */
  227.     for ($i = 1; $i <= $this->linien_anzahl; $i++)
  228.     {
  229.     /* linienfarbe zufall */
  230.     $line_color = ImageColorAllocate($img, rand(100,255), rand(100,255), rand(100,255));
  231.  
  232.     /* liniendicke zufall 1 - 3 pixel */
  233.     imagesetthickness($img, mt_rand(1,3));
  234.  
  235.     /* linie start- und endposition zufall */
  236.     $x1 = mt_rand($this->width / 2,$this->width - 8);
  237.     $y1 = mt_rand(20,$this->height / 2);
  238.     $x2 = mt_rand(15,$x1);
  239.     $y2 = mt_rand($y1 - 5,$this->height - 8);
  240.  
  241.     imageline( $img, $x1, $y1, $x2, $y2, $line_color );
  242.     }
  243.     /* linien rechts nach unten auf das bild zeichnen ENDE */
  244.  
  245.   /* wasserzeichen 1 einbauen */
  246.   $wattermark_Color = ImageColorAllocate ($img, 0, 5, 169);
  247.   $textLaenge_1 = imagefontwidth((int)$this->watermark_1);
  248.   ImageTTFText($img, $this->font_size_watermark_1, 0, 30, ($this->font_size_watermark_1 + 7), $wattermark_Color, $this->fontWassermarke, $this->watermark_1);
  249.  
  250.   /* wasserzeichen 2 einbauen */
  251.   $wattermark_Color = ImageColorAllocate ($img, 0, 5, 169);
  252.   $textLaenge_2 = imagefontwidth((int)$this->watermark_2);
  253.   ImageTTFText($img, ($this->font_size_watermark_2), 90, ($this->font_size_watermark_2 + 7), ($this->font_size_watermark_2 + $this->height - $this->font_size_watermark_2 - 8), $wattermark_Color, $this->fontWassermarke, $this->watermark_2);
  254.  
  255.   /* bild anzeigen */
  256.   header("Content-type: image/gif");
  257.   ImageGIF($img);
  258.  
  259.   /* bild freigabe */
  260.   ImageDestroy($img);
  261.   }
  262.   /* 010_100  bild mit zufallscode erstellen  ENDE */
  263.  
  264. /* ---------------------------------------------------------------------------------------------------- */
  265.  
  266.   /* 010_900  captcha pruefen ANFANG */
  267.   public static function Validate($MyCode, $Id, $GrossKlein)
  268.   {
  269.     /* captcha gross- und kleinschreibung einhalten */
  270.     if(isset($GrossKlein) &&  $GrossKlein == 1)
  271.     {
  272.     $MyCode = $MyCode;
  273.  
  274.       if (!empty($_SESSION[GJ_CAPTCHA_SESSION_ID][$Id]) && $MyCode == $_SESSION[GJ_CAPTCHA_SESSION_ID][$Id])
  275.       {
  276.       unset($_SESSION[GJ_CAPTCHA_SESSION_ID][$Id]);
  277.       return true;
  278.       }
  279.     /* captcha gross- und kleinschreibung egal */
  280.     } else if(isset($GrossKlein)  &&  $GrossKlein == 2)
  281.       {
  282.       $MyCode = strtoupper($MyCode);
  283.  
  284.         if (!empty($_SESSION[GJ_CAPTCHA_SESSION_ID][$Id]) && $MyCode == strtoupper($_SESSION[GJ_CAPTCHA_SESSION_ID][$Id]))
  285.         {
  286.         unset($_SESSION[GJ_CAPTCHA_SESSION_ID][$Id]);
  287.         return true;
  288.         }
  289.       }
  290.   return false;
  291.   }
  292.   /* 010_900  captcha pruefen ENDE */
  293. }
  294. /* 010  captcha starten ENDE */
  295. ?>
powered by GJweb e.U.

 

Captcha_Image1.php - einfach makieren und kopieren
  1. <?php header('Content-type: text/html; charset=utf-8');
  2. /*
  3. ----------------------------------------------------------------------------------------------------
  4. script name:      Captcha_Image.php
  5. script autor:     Johann Glechner GJweb e.U.
  6. aenderung von:    Johann Glechner
  7. erstellt am:      13.10.2014
  8. geaendert am:     13.10.2014
  9. letzte aenderung:
  10. 13.10.2014  script erstellt
  11. ----------------------------------------------------------------------------------------------------
  12. script-history:
  13.  
  14. ----------------------------------------------------------------------------------------------------
  15. */
  16. if (!isset($_SESSION["session_started"]))
  17. {
  18. $_SESSION["session_started"] = true;
  19. }
  20.  
  21. function __autoload($class)
  22. {
  23. require_once ('class/'.$class.'.class.php');
  24. }
  25.  
  26. $CaptchaIMG = new Captcha();
  27. $CaptchaIMG->Create('Nevis', 'Nevis');
  28. ?>
powered by GJweb e.U.

 

index.php - einfach makieren und kopieren
  1. <?php header('Content-type: text/html; charset=utf-8');
  2. /*
  3. ----------------------------------------------------------------------------------------------------
  4. script name:      index.php
  5. script autor:     Johann Glechner GJweb e.U.
  6. aenderung von:    Johann Glechner
  7. erstellt am:      23.10.2014
  8. geaendert am:     23.10.2014
  9. letzte aenderung:
  10. 23.10.2014  script erstellt und unter GPL 3 gestellt
  11. ----------------------------------------------------------------------------------------------------
  12. */
  13.  
  14.   if (! isset($_SESSION["session_started"]))
  15.   {
  16.   $_SESSION["session_started"] = true;
  17.   }
  18.  
  19.   function __autoload($class)
  20.   {
  21.     if(file_exists("class/".$class.".class.php"))
  22.     {
  23.     require_once ('class/'.$class.'.class.php');
  24.     }
  25.   }
  26.  
  27.   if(isset($_POST['GrossKlein1']) &&  is_numeric($_POST['GrossKlein1']))  { $GrossKlein1  = $_POST['GrossKlein1'];  } else  { $GrossKlein1  = 1; }
  28.  
  29.   echo '<div>';
  30.   echo '<form action="index.php" name="CAPTCHA1" method="post">';
  31.   echo '<img src="Captcha_Image1.php?id=1" alt="Captcha power by GJweb www.gjweb.at" title="Captcha power by GJweb www.gjweb.at" /><br />Nevis Schrift und Hintergrund-Image mit Nevis Schrift';
  32.   echo '<br /><br />Groß-/ Kleinschreibung beachten >>> <input type="radio" name="GrossKlein1" value="1" '.(($GrossKlein1=="1") ? 'checked="checked"' : '').' /><br />nicht beachten >>> <input type="radio" name="GrossKlein1" value="2" '.(($GrossKlein1=="2") ? 'checked="checked"' : '').' />';
  33.   echo '<br /><br />Captcha eingeben: <input type="text" name="captcha_code1" size="5" maxlength="5" />';
  34.  
  35.     if(isset($_POST['captcha_code1']) &&  $_POST['captcha_code1']!="")
  36.     {
  37.       /* gross und kleinschreibung "$GrossKlein" wuerde ich fix eingeben 1 fuer gross klein wird validiert und 2 ist egal ob klein oder gross */
  38.       if(Captcha::Validate($_POST['captcha_code1'], 1, $GrossKlein1) == false)
  39.       {
  40.       echo '<br /><br />Captcha <b style="color: #ff0000;">F A L S C H</b>';
  41.       } else
  42.         {
  43.         echo '<br /><br />Captcha <b style="color: #0000ff;">R I C H T I G</b>';
  44.         }
  45.     }
  46.  
  47.   echo '<br /><br /><input type="submit" value="S E N D" />';
  48.   echo '</form></div>';
  49.  
  50. ?>
powered by GJweb e.U.

 

 

GJweb News
GJweb Angebote
GJweb QR-Code Generator
GJweb Referenzen
GJweb r-CMS gjOps
Domain suche
GJweb Downloads
GJweb Statistiken
GJweb - Google PageSpeed