Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- $id=200; // номер корректной ссылки (id файла)
- error_reporting(0);
- $st="1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; // 62 символа
- $n_st=strlen($st);
- function ran_array ($n_letter) // для каждого нового порядкового символа в короткой ссылке генерируется своя последовательность символов
- {
- global $st,$n_st;
- $st1="";
- for ($i=0; $i<$n_st; $i++ )
- {
- $smeshenie=$i+abs(372-$n_letter*123+$n_letter*$n_letter); // определяем смешения для переноса символа в строке (для перетасовки списка букв)
- while ($st0[$smeshenie]!="") {$rand++; $smeshenie=$rand+$i+abs(372-$n_letter*123+$n_letter*$n_letter);} // если позиция для "переноса" буквы занята - находим другую свободную
- $st0[$smeshenie]=$st[$i]; // назначаем в новое место в списке букв перенесенную
- }
- foreach ($st0 as $key => $value) $st1=$st1.$value; // формируем из массива строку
- return $st1;
- }
- function link_gen ($n)
- {
- global $st,$n_st;
- $k=103*$n; // какое кол-во разных ссылок должно быть с учетом того, что из 103 только одна работая
- $n_letter=ceil(sqrt($k)); // определяем сколько символов будет в короткой ссылке
- $i=0;
- $s=$k;
- while ($s>$n_st) // n=(((a1*62+a2)*62+a3)*62+a4) 62- число символов в строке // разбиваем число на массив a[]
- {
- $i++;
- $a[$i]=$s%$n_st;
- $s=floor($s/$n_st);
- $a[$i+1]=$s;
- }
- $link="";
- for ($ii=$i+1; $ii>0; $ii--) {$n_s=ran_array($ii); $letter=$n_s[$a[$ii]]; $link=$link.$letter;}; // собираем буквы на основе номер ее в массиве А и порядковому номеру в короткой ссылке
- return $link;
- }
- $link=link_gen($id);
- echo "id=$id link=$link <br>";
- function link_decod ($link)
- {
- global $st,$n_st;
- $i=strlen($link)-1;
- for ($ii=$i; $ii>=0; $ii--) {$x=$i-$ii+1; $n_s=ran_array($ii); $a[$x]=strpos($n_s,$link[$ii]);}; // по номеру буквы в короткой ссылке находим порядковый номер ее в соотвт порядковой строке символов
- $n=0; $s=0;
- krsort ($a);
- foreach ($a as $key => $value) // n=(((a1*62+a2)*62+a3)*62+a4) 62- число символов в строке // на основе массива находим число
- {
- $s++; if ($s==1) $n=$value*$n_st;
- if ($s==2) $n=$n+$value;
- if ($s>2) $n=$value+$n*$n_st;
- }
- $n2=$n/103;
- if ($n%103!=0) $n2="not good link";
- return $n2;
- }
- $id=link_decod ($link);
- echo "decod link=$link id=$id <br>";
- $link="3t378fiueg";
- $id=link_decod ($link);
- echo "decod link=$link id=$id <br>";
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement