Report abuse

<?php
/*************************************************************
   * Генератор ников
   * http://BrokenBrake.biz/
*************************************************************/
  mb_internal_encoding('UTF-8');
  
  $q = $_GET['q'];
  $lang = $_GET['lang'];
  $num = $_GET['num']; // prefixGen | halfGluing | bcdReplace
  $type = $_GET['type'];
  
  $ru = false;
  if ($lang == 'ru')
      $ru = true;
  if (empty($num))
      $num = 5;
  if (empty($type))
      $type = 'prefixGen';
  if (empty($q))
      $q = 'test';
  
  
/*
function endsdel($word) // Глагольные окончания всякие
{
$ends = array(
'/тся$/u',
'/ться$/u', 
'/ть$/u', 
'/ся$/u', 
'/аю$/u', 
'/шь$/u', 
'/сь$/u', 
'/ют$/u',
'/и$/u');
return preg_replace($ends, '', $word);
}
*/
  
  
  
  function prefixGen($words, $ru)// Алгоритм добавления приставок
  {
      unset($words['halves1'], $words['halves2']);
      foreach ($words as $val) {
          $prefixes = 'su, do, du, de, un, pseudo, super, emo, hyper, mega, meta, nano, tera, anti, avia, porno, euro, bio, micro, uni, neo, conta, co-, in, mis, over, pre, post, re, sub';
          $end = $val;
          if ($ru) {
              $prefixes = 'недо, пере, во, вы, до, за, изо, ко, на, не, о, обо, ото, па, по, подо, пра, предо, про, разо, со, пре, при, мета, су, у, гипер, гипо, недопере, перенедо, ана, а, дека, гекто, кило, мега, гига, пета, экса, тера, микро, мини, милли, нано, пико, деци, йокто, йоби, киби, меби, гиби, теби, пеби, эксби, экс-, зеби, эрзац-, слабо, био, техно, страшно, переподвы, индо, евро, нагло, спорно, псевдо, сверх, супер, квази, лже, архи, де, анти, ультра, флудо, эмо, порно, глупо, умно, странно, обоюдо, нео, после, авиа, пай-, ебо, педо, уни, лакто, литро, нарко, вые, добро, снего, садо, абра, арабо, гидро, англо, педро, ибн-, сочно, трудо, грязно, ложно, переподвы, худо, ржачно, любо, мило, крико, синхро, психо, водо, говно, круто, вольно, пара, паро, боле, астро, стерео, моно, сыро, мясо, нитро, зло, авто, мото, вело, кино, радио, ретро, трахо, сексо, вечно, потно, взрыво, криво, ядо, волно, фило, само, крупно, мелко, титько, жопо, гнуто, рабо, крио, аква, длинно, лаго, баго, блохо, макро, би, тетра, тупо, страхо, воро, бандито, сердито, вьюго, ветро, градо, между, токсо, токси, славно, бого, полу, полу, полу, нано, нано, лже, лже, эмо, эмо, эмо, микро, микро, псевдо, всевдо, квази, квази, нарко, евро, евро, ибн-, ибн-';
          }
          $prefixes = explode(', ', $prefixes);
          shuffle($prefixes);
          $prefix = $prefixes[0];
          $result[] = $prefix . $end;
      }
      return $result;
  }
  
  
  
  function halfGluing($words, $ru)// Алгоритм склейки половинок разных слов
  {
      shuffle($words['halves2']);
      foreach ($words['halves1'] as $key => $val) {
          $end = $words['halves2'][$key];
          $result[] = $val . $end;
      }
      return $result;
  }
  
  
  function bcdReplace($words, $ru) // Алгоритм замены согласных
  {
      unset($words['halves1'], $words['halves2']);
      
      function randl($letters)
      {
          shuffle($letters);
          return array_shift($letters);
      }
      
      function bcd($raw, $ru)
      {
          $letters = str_split('bcdfghklmnpqrstvwxz');
          if ($ru)
              $letters = explode(',', 'б,в,г,д,ж,з,к,л,м,н,р,с,ч,ш'); // Исключение некоторых букв повышает читаемость
          $temp = mb_split('1', $raw);
          foreach ($temp as $val) {
              $one = $val;
              if ($val == '0')
                  $one = randl($letters);
              $nick .= $one;
          }
          return $nick;
      }
      
      foreach ($words as $word) {
          $search = 'bcdfghklmnpqrstvwxz';
          if ($ru)
             $search = 'бвгджзклмнпрстфхцчшщ';
          $raw = preg_replace("/[$search]/u", '101', $word);
          $result[] = bcd($raw, $ru);
      }
      return $result;
  }
  
// $base = unserialize(file_get_contents("base.txt")); // Удобно для тестирования
$base = unserialize(
file_get_contents("http://pipes.yahoo.com/pipes/pipe.run?_id=2e234671cafed4492b6f560a4d9d0ddb&_render=php&int=4-12&lang=$lang&q=$q")
);
$words = $base['value']['items'];
  
  
  foreach ($words as $val) {
      $word = $val['title'];
      $justwords[] = $word;
      $lesshalf = '{' . floor(mb_strlen($word) * 0.4) . '}';
      $ready = 'бвгджзклмнпрстфхцчшщbcdfghklmnpqrstvwxz';
      preg_match_all("/(^.$lesshalf.*[$ready])(.*$)/Uu", $word, $halves);
      $justwords['halves1'][] = $halves[1][0];
      $justwords['halves2'][] = $halves[2][0];
  }
  
  
  $nicknames = $type($justwords, $ru);
  shuffle($nicknames);
  $result = array_slice($nicknames, 0, $num);
  if (!empty($result)) {
      echo join(', ', $result);
  } else {
      echo 'error';
  }