Advertisement
tolikpunkoff

pseudographic-captcha.php

Mar 27th, 2017
740
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.82 KB | None | 0 0
  1. <?php
  2.         //переменные скрипта
  3.        
  4.        
  5.         $pgstring="#$%@!?0"; //символы, из которых будут составлены цифры
  6.         $spstring="- "; //пробельные символы
  7.         $pgchar="";
  8.         $spchar="";
  9.        
  10.         //массивы, с символьными строчками, отображающими цифры
  11.         //0
  12.         $num0=array("*$$$$*","$$**$$","$$**$$","$$**$$","*$$$$*");
  13.         //1
  14.         $num1=array("**$$**","*$$$**","$*$$**","**$$**","$$$$$$");
  15.         //2
  16.         $num2=array("*$$$$*","$$**$$","***$$*","**$$**","$$$$$$");
  17.         //3
  18.         $num3=array("*$$$$*","$$**$$","***$$*","$$**$$","*$$$$*");
  19.         //4
  20.         $num4=array("$$**$$","$$**$$","$$$$$$","****$$","****$$");
  21.         //5
  22.         $num5=array("$$$$$$","$$****","$$$$$*","****$$","$$$$$*");
  23.         //6
  24.         $num6=array("*$$$$$","$$****","$$$$$*","$$**$$","*$$$$*");
  25.         //7
  26.         $num7=array("$$$$$$","***$$*","**$$**","*$$***","$$****");
  27.         //8
  28.         $num8=array("*$$$$*","$$**$$","*$$$$*","$$**$$","*$$$$*");
  29.         //9
  30.         $num9=array("*$$$$$","$$**$$","*$$$$$","****$$","*$$$$*");
  31.        
  32.         //все цифры
  33.         $allnum=array($num0,$num1,$num2,$num3,$num4,$num5,$num6,$num7,$num8,$num9);
  34.        
  35.         //функции
  36.        
  37.         function gennum($num)
  38.         {
  39.             $ans="";
  40.             for ($i=0; $i<count($num); $i++)
  41.             {
  42.                 $ans=$ans.$num[$i]."<br>";
  43.             }
  44.             return $ans;
  45.         }
  46.        
  47.         //получает случайный символ из строки
  48.         function randomchar($srcstr)
  49.         {
  50.             $i=rand(0,strlen($srcstr)-1);          
  51.             return $srcstr{$i};
  52.         }
  53.        
  54.         //формирует число псевдографикой
  55.         //параметры: число в виде строки, массив с цифрами
  56.         //символ пробела между цифрами, количество пробелов между цифрами
  57.         //начальные пробелы, конечные пробелы
  58.         function getpgnum($numstr,$numarr,$spchr,$spctr,$startsp,$endsp)
  59.         {
  60.             $ans="";
  61.             $spstr="";
  62.             $num=0;
  63.             $curline=""; //текущая строка формируемого изображения
  64.            
  65.             if (!is_numeric($numstr)) //если в строку запихали не цифру
  66.                 {
  67.                     echo ("ERROR: NOT NUMBER ".$numstr); //выводим ошибку и завершаем скрипт
  68.                     die();
  69.                 }
  70.            
  71.             //формируем строку пробельных символов
  72.             for ($i=0;$i<$spctr;$i++)
  73.             {
  74.                 $spstr=$spstr.$spchr;
  75.             }
  76.                                    
  77.             //проходим по всем строчкам изображения цифры
  78.             //цифры все одинаковой высоты - 5 строк
  79.             for ($j=0;$j<5;$j++)
  80.             {
  81.                 //проходим по строке с числом
  82.                 for ($i=0;$i<strlen($numstr);$i++)
  83.                 {
  84.                     //$curline=""; //обнуляем текущую строчку изображения всей капчи
  85.                     $num=$numstr{$i}; //вытаскиваем отдельную цифру                                       
  86.                     $imgnum=$numarr[$num]; //вытаскиваем изображение конкретной цифры
  87.                     //$imgnum[$j] - конкретная строчка изображения
  88.                    
  89.                     //формируем текущую линию для изображения всех цифр каптчи
  90.                     $curline=$curline.$imgnum[$j].$spstr;
  91.                 }
  92.                
  93.                 //линия сформирована
  94.                 if ($startsp) //если нужны стартовые пробелы - добавляем
  95.                 {
  96.                     $curline=$spstr.$curline;
  97.                 }
  98.                
  99.                 if (!$endsp) //если НЕ нужны конечные пробелы - удаляем
  100.                 {
  101.                     $curline=substr($curline,0,strlen($curline)-$spctr);
  102.                 }
  103.                
  104.                 $ans=$ans.$curline."\r\n"; //в конце строчки добавляем перенос строки
  105.                 $curline=""; //очищаем переменную для хранения текущей строки каптчи
  106.             }
  107.            
  108.             return $ans;
  109.            
  110.         }
  111.        
  112.         function getcaptchacode($codelen)
  113.         {
  114.             $ans="";
  115.             for ($i=0;$i<$codelen;$i++)
  116.             {
  117.                 $r=rand(0,9);
  118.                 $ans=$ans.$r;
  119.             }
  120.             return $ans;
  121.         }
  122.        
  123.        
  124.         //тело скрпита
  125.        
  126.         $pgchar=randomchar($pgstring);
  127.         $spchar=randomchar($spstring);
  128.        
  129.         //заменяем символы в псевдографике на случайные
  130.         for ($i=0; $i<count($allnum); $i++) //цикл по массиву со всеми цифрами
  131.         {
  132.             for ($j=0; $j<count($allnum[$i]); $j++) //цикл по всем строчкам с псевдографикой
  133.             {
  134.                 $allnum[$i][$j]=str_replace("$",$pgchar,$allnum[$i][$j]);
  135.                 $allnum[$i][$j]=str_replace("*",$spchar,$allnum[$i][$j]);
  136.             }
  137.         }
  138.        
  139.         /*
  140.         Пример получения кода и строки псевдографических цифр
  141.         $code=getcaptchacode(6);
  142.         $pgn=getpgnum($code,$allnum," ",3);
  143.         echo ("<pre><code>".$pgn."</code></pre>");
  144.         */
  145.                
  146. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement