Advertisement
Andrei_Intrum

Untitled

Apr 20th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.99 KB | None | 0 0
  1. <?
  2. $id=200; // номер корректной ссылки (id файла)
  3. error_reporting(0);
  4.  
  5. $st="1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; // 62 символа
  6. $n_st=strlen($st);
  7.  
  8.  
  9. function ran_array ($n_letter)  // для каждого нового порядкового символа в короткой ссылке генерируется своя последовательность символов
  10. {
  11.     global $st,$n_st;
  12.     $st1="";
  13.     for ($i=0; $i<$n_st; $i++ )
  14.     {
  15.         $smeshenie=$i+abs(372-$n_letter*123+$n_letter*$n_letter); // определяем смешения для переноса символа в строке (для перетасовки списка букв)
  16.         while ($st0[$smeshenie]!="") {$rand++; $smeshenie=$rand+$i+abs(372-$n_letter*123+$n_letter*$n_letter);} // если позиция для "переноса" буквы занята - находим другую свободную
  17.         $st0[$smeshenie]=$st[$i]; // назначаем в новое место в списке букв перенесенную
  18.     }
  19.     foreach ($st0 as $key => $value) $st1=$st1.$value; // формируем из массива строку
  20.     return $st1;
  21. }
  22.  
  23. function link_gen ($n)
  24. {
  25.     global $st,$n_st;
  26.     $k=103*$n; // какое кол-во разных ссылок должно быть с учетом того, что из 103 только одна работая
  27.     $n_letter=ceil(sqrt($k)); // определяем сколько символов будет в короткой ссылке  
  28.     $i=0;
  29.     $s=$k;
  30.     while ($s>$n_st)  // n=(((a1*62+a2)*62+a3)*62+a4)   62- число символов в строке  // разбиваем число на массив a[]
  31.     {
  32.         $i++;
  33.         $a[$i]=$s%$n_st;
  34.         $s=floor($s/$n_st);
  35.         $a[$i+1]=$s;
  36.     }
  37.     $link="";
  38.     for ($ii=$i+1; $ii>0; $ii--) {$n_s=ran_array($ii); $letter=$n_s[$a[$ii]]; $link=$link.$letter;}; // собираем буквы на основе номер ее в массиве А и порядковому номеру в короткой ссылке
  39.    
  40.     return $link;
  41. }
  42.  
  43. $link=link_gen($id);
  44. echo "id=$id link=$link <br>";
  45.  
  46. function link_decod ($link)
  47. {
  48.     global $st,$n_st;
  49.     $i=strlen($link)-1;
  50.     for ($ii=$i; $ii>=0; $ii--) {$x=$i-$ii+1; $n_s=ran_array($ii); $a[$x]=strpos($n_s,$link[$ii]);}; // по номеру буквы в короткой ссылке находим порядковый номер ее в соотвт порядковой строке символов
  51.     $n=0; $s=0;
  52.     krsort ($a);
  53.     foreach ($a as $key => $value) // n=(((a1*62+a2)*62+a3)*62+a4)   62- число символов в строке   // на основе массива находим число
  54.     {
  55.         $s++; if ($s==1) $n=$value*$n_st;
  56.         if ($s==2) $n=$n+$value;
  57.         if ($s>2) $n=$value+$n*$n_st;
  58.     }
  59.     $n2=$n/103;
  60.     if ($n%103!=0) $n2="not good link";
  61.     return $n2;
  62. }
  63. $id=link_decod ($link);
  64. echo "decod link=$link id=$id <br>";
  65.  
  66. $link="3t378fiueg";
  67. $id=link_decod ($link);
  68. echo "decod link=$link id=$id <br>";
  69.  
  70. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement