Видео Работа с фейковыми данными в Human Emulator



Создание случайных данных для автозаполнения различных форм и полей.

Последнее время очень много сайтов требуют от нас регистрации для получения доступа к их контенту. При этом не хочется оставлять свои реальные данные на чьём-то сайте ради того, что бы скачать или прочитать что-то. Поэтому мы заполняем такие формы регистрации так называемыми"фейковыми" данными, то есть неправдивыми. Хорошо если такие действия нам приходится выполнять раз в пятилетку, ну а если у нас есть необходимость постоянно регистрироваться, тут уже понадобиться десятки, а может и сотни таких неправдивых данных. Специально для этого в Human Emulator добавлен объект submitter.

Этот объект содержит методы по получению случайного профиля пользователя его имени и фамилии, его географического положения, а также функции создания случайного набора букв и цифр. Весь функционал работает в двух языковых режимах: "en" - английский, "ru" - русский. В RU режиме также можно указывать пол.

Логин и пароль.

Для генерации логина и пароля в объекте submitter можно использовать функции:


Пример:
// получить случайный ник
$len_nick = $submitter->generate_random_nick_name(rand(7,12));
echo "случайный ник : ".$len_nick."<br>";
 
// случайный ник с цифрой на конце:  
$len_nick = $submitter->generate_random_nick_name(5,7).rand(100,999);
echo "случайный ник с цифрой на конце : ".$len_nick."<br>";
 
// случайных текст английский
$rand_pwd_en = $submitter->generate_random_text(rand(8,12),1);
echo "случайных текст английский : ".$rand_pwd_en."<br>";
 
$rand_pwd_ru  = $submitter->generate_random_text(rand(8,12),2);
echo "случайных текст кириллица : ".$rand_pwd_ru."<br>";
 
echo "generate_random_number : ".$submitter->generate_random_number(1,10,true)."<br>";
 
echo "mt_rand : ".mt_rand(1,10)."<br>";
//
// получить составной пароль
echo "составной пароль : ".$pwd = strtoupper($submitter->generate_random_text(rand(1,3),1)).
mt_rand(10,100).$submitter->generate_random_text(rand(1,3),1).mt_rand(1,1000);


Результат:
случайный ник : moqaruf
случайный ник с цифрой на конце : boduq654
случайных текст английский : fjzuhtce
случайных текст кириллица : дожэгвичащ
generate_random_number : 5
mt_rand : 2
составной пароль : AWV62xex57


Как видим из примера функция $submitter->generate_random_number аналогична функциям php rand и mt_rand, единственное её отличие это возможность генерировать вещественное число, то есть число вместе со знаками после запятой.

Используя "чистый"(без использование объектов хуман эмулятора) пхп код можно также генерировать логин и пароль.


Пример:
// генерация логина
echo "логин : ".generate_login(rand(5,12))."<br>"; 
// генерация пароля 
echo "пароль : ".generate_password(rand(5,12))."<br>";
 // возвращает 128-битный хеш-код
echo "id : ".$id = md5(uniqid(rand(),true))."<br>";
 
echo "пароль2 : ".generate_password2(rand(5,12));
 
  function generate_password2($number)
  {
    $arr = array("a","b","c","d","e","f",
                 "g","h","i","j","k","l",
                 "m","n","o","p","r","s",
                 "t","u","v","x","y","z",
                 "A","B","C","D","E","F",
                 "G","H","I","J","K","L",
                 "M","N","O","P","R","S",
                 "T","U","V","X","Y","Z",
                 "1","2","3","4","5","6",
                 "7","8","9","0",".",",",
                 "(",")","[","]","!","?",
                 "&","^","%","@","*","$",
                 "<",">","/","|","+","-",
                 "{","}","`","~");
    // Генерируем пароль
    $pass = "";
    for($i = 0; $i < $number; $i++)
    {
      // Вычисляем случайный индекс массива
      $index = rand(0, count($arr) - 1);
      $pass .= $arr[$index];
    }
    return $pass;
  }
 
// функция генерации пароля 
function generate_password($len) 
{ 
$string = ""; 
for ($i=0; $i<$len; $i++) 
{ 
$ch = ""; 
$d = (int)rand(1,3); 
if ($d==1) 
{ $ch = chr((int)rand(0, 9)+48); } 
if ($d==2) 
{ $ch = chr((int)rand(0,25)+65); } 
if ($d==3) 
{ $ch = chr((int)rand(0,25)+97); } 
$string.=$ch; 
} 
return $string; 
} 
 
// функция генерации логина
function generate_login($len) 
{ 
$r = ""; 
$allowedSymbols = array("b","a","c","e","d","o","f","i","g","u","h","o","j","e","k","o","l","e","m","u","n","o","p","a","q","e","r","o","s","i","t","u","v","e","w","a","x","o","y","i","z"); 
for ($i=0; $i<$len; $i++) 
{
  $rand=array_rand($allowedSymbols);
  if ($i % 2 == 0)
  {
   while($rand% 2 != 0)
   {$rand=array_rand($allowedSymbols);}
   $r.=$allowedSymbols[$rand]; 
  }
  else
  {
     while($rand% 2 == 0)
   {$rand=array_rand($allowedSymbols);}
   $r.=$allowedSymbols[$rand];  
  } 
}
 
return $r; 
}


Результат:
логин : xuwuyuqopi
пароль : tE05n7d6Au
id : 9f52e3de6c07cbc82df1eb971d17e674
пароль2 : yPROH|6x


В сети можно найти огромное количество различных примеров для генерации логина и пароля на PHP под любые требования к их созданию.

Для записи полученных логина и пароля в файл можно использовать следующий код:

$textfile->add_string_to_file("путь к файлу с аккаунтами",$len_nick.":".$pwd."\r\n",60);


описание функции add_string_to_file

Имя и фамилия.

Для генерации случайных имени и фамилии используются следующие функции:


Пример:
//  /////////////////////////// английские имя и фамилия
echo  "английские имя и фамилия : ";
$f_name = $submitter->generate_random_name("EN");
$l_name = $submitter->generate_random_second_name("EN");
 
echo $f_name." ". $l_name ."<br>";
 
// ///////////////////////////////////// русские имя и фамилия
// пол 
$i_gender=rand(0,1);
$str_gender="man";
if($i_gender==1)
    $str_gender="woman";    
 
echo "пол : ".$str_gender."<br>";
// Имя
$f_name = $submitter->generate_random_name("RU",$str_gender);
// Фамилия
$l_name = $submitter->generate_random_second_name("RU",$str_gender);
 
echo  "русские имя и фамилия : ".$f_name." ". $l_name ."<br>";
 
// переводим имя и фамилию в латиницу
echo "переводим имя и фамилию в латиницу : " . $full_name_lat = rus2translit($f_name." ".$l_name);
 
// функция перевода текста с кириллицы в траскрипт
function rus2translit($str)
{
	// сначала заменяем "односимвольные" фонемы.
	$str = strtr($str, "абвгдеёзийклмнопрстуфхъыэ", "abvgdeeziyklmnoprstufh"ie");
	$str = strtr($str, "АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ", "ABVGDEEZIYKLMNOPRSTUFH"IE");
	// Затем - "многосимвольные".
	$str = strtr($str, array(
			"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", 
			"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya",
			"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", 
			"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA",
			"ї"=>"i", "Ї"=>"Yi", "є"=>"ie", "Є"=>"Ye"));
	// Возвращаем результат.
	return $str;
}


Результат:
английские имя и фамилия : Hanski Jimenez
пол : man
русские имя и фамилия : Андрей Андроников
переводим имя и фамилию в латиницу : Andrey Andronikov


Как видно из примера мы можем создавать как английские, так и русские имена и фамилии и в случае необходимости транслитерировать русские имена и фамилии с использованием латиницы.

Дата рождения и возраст.

Для генерации случайной даты рождения и вычисления возраста используется php функционал.


Пример:
//  ////////////////////////////////// день рождения
// день
$day = rand(1,28);
// добавим ноль в начало если меньше 10
if($day<10)
 $day="0".$day;
// месяц
$month=rand(1,12);
if($month<10)
 $month="0".$month;
// год
$year = rand(1970,1993);
 
echo "дата рождения : ".$day.".".$month.".".$year ."<br>";
 
// использование функционала date php для создания случайной даты в заданном диапазоне
// начало диапазона дат
$sDateFrom = "1970-01-01";
// конец диапозона дат
$sDateTill = "2000-01-01";
$sDate = date("d.m.Y", mt_rand(strtotime($sDateFrom), strtotime($sDateTill)));
 
echo  "дата рождения с использованием date : ".$sDate."<br>";
 
// вычислим возраст
echo "возраст : ".calculate_age($sDate);
 
// вычислить возраст по дате рожения
function calculate_age($birthday) {
  $birthday_timestamp = strtotime($birthday);
  $age = date("Y") - date("Y", $birthday_timestamp);
  if (date("md", $birthday_timestamp) > date("md")) {
    $age--;
  }
  return $age;
}


результат:
дата рождения : 15.10.1984
дата рождения с использованием date : 30.11.1979
возраст : 37


В зависимости от того каким образом надо будет вводить дату в форму, либо это несколько выпадающих списков для отдельного ввода дня, месяца и года или же это просто поле для ввода даты рождения, мы можем сгенерировать необходимые нам данные и в дальнейшем определить возраст по полученному дню рождения.

Местоположение.

Для создания местоположения используются следующие функции:


пример:
// местоположение на русском
echo "местоположение на русском <br>";
echo "регион : ".$submitter->generate_random_region("RU")."<br>";
echo "страна : ".$submitter->generate_random_country("RU")."<br>";
echo "город : ".$submitter->generate_random_city("RU")."<br>";
echo "улица : ".$submitter->generate_random_street("RU")."<br>";
 
// местоположение на английском
echo "местоположение на английском <br>";
echo "регион : ".$submitter->generate_random_region("EN")."<br>";
echo "страна : ".$submitter->generate_random_country("EN")."<br>";
echo "город : ".$submitter->generate_random_city("EN")."<br>";
echo "улица : ".$submitter->generate_random_street("EN")."<br>";


результат:
местоположение на русском 
регион : Замбия
страна : Гайана
город : Верхняя тура
улица : Балаклавская, ул.
 
местоположение на английском 
регион : Vermont
страна : Belarus
город : Hillersleben
улица : Iniscarn Road


Как видно из примера все функции генерят полностью случайные и не связанные между собой локации.

Для того что бы получать связанные локации можно использовать php код из сети. Вот например есть API Вконтакте с уже готовыми базами данных https://vk.com/dev/database. Берём и адаптируем это для наших нужд.


Пример:
 
    $lang = 0; // russian
    $headerOptions = array(
        "http" => array(
            "method" => "GET",
            "header" => "Accept-language: ru\r\n" .
            "Cookie: remixlang=$lang\r\n"
        )
    );
    // получаем список стран используя api.vk.com
    $methodUrl = "http://api.vk.com/method/database.getCountries?v=5.5&need_all=1&count=1000";
    $streamContext = stream_context_create($headerOptions);
    // содержимое базы
    $json = file_get_contents($methodUrl, false, $streamContext);
    // массив со странами
    $arr = json_decode($json, true);
    //echo "Total countries count: " . $arr["response"]["count"] . " loaded: " . count($arr["response"]["items"])."<br>";
    // берём случайный элемент массива
    $num = rand(0,$arr["response"]["count"]-1);
    // получаем случайный id страны
    $countryId =  $arr["response"]["items"][$num]["id"];
    echo "<br>страна : ";
    $countryName = $arr["response"]["items"][$num]["title"];
    // $countryId = 1; // Russia
    // выведем в панель отладки название страны
    echo $countryName  = iconv("utf-8", "windows-1251//IGNORE", $countryName);
 
    // получаем регионы используя api.vk.com и полученный выше $countryId
    $methodUrl = "http://api.vk.com/method/database.getRegions?v=5.5&need_all=1&offset=0&count=1000&country_id=" . $countryId;
    $streamContext = stream_context_create($headerOptions);
    // читаем файл
    $json = file_get_contents($methodUrl, false, $streamContext);
    // получаем массив с регионами
    $arr1 = json_decode($json, true);
    //echo "Total regions count: " . $arr["response"]["count"] . " loaded: " . count($arr["response"]["items"]);
    //print_r($arr["response"]["items"]); 
    // случайный элменет массива    
    $num = rand(0,$arr1["response"]["count"]-1);
    // id региона
    $regionId = $arr1["response"]["items"][$num]["id"];
    echo "<br>регион : ";
    $RegionName = $arr1["response"]["items"][$num]["title"];
    // выведем в панель отладки название региона
    echo $RegionName = iconv("utf-8", "windows-1251//IGNORE", $RegionName);
 
    // получаем города используя api.vk.com и полученный выше $countryId и $regionId
    $methodUrl = "http://api.vk.com/method/database.getCities?v=5.5&country_id=" . $countryId . "&region_id=" . $regionId . "&offset=0&need_all=1&count=1000";
    $streamContext = stream_context_create($headerOptions);
    $json = file_get_contents($methodUrl, false, $streamContext);
    // заполняем массив 
    $arr2 = json_decode($json, true);
    //echo "Total cities count: " . $arr["response"]["count"] . " loaded: " . count($arr["response"]["items"]);
    //print_r($arr["response"]["items"]); 
    // случайный элемент массива
    $num = rand(0,$arr2["response"]["count"]-1);
    // id города
    $cytiId = $arr2["response"]["items"][$num]["id"];
    echo "<br>город : ";
    $СytiName = $arr2["response"]["items"][$num]["title"];
    // выведем в панель отладки название города
    echo $СytiName = iconv("utf-8", "windows-1251//IGNORE", $СytiName);


Результат:
страна : Чили
регион : Regin de la Araucana
город : Teodoro Schmidt



Вот подробная статья на тему использование данного API ВКонтакте

Ну а для получения номера дома и номера квартиры используем функции rand(1,28); или mt_rand(1,28); с нужными диапазонами.

Как видим, помимо использования встроенного в Хуман Эмулятор функционала для генерации различных данных, разработчикам скриптов автоматизации в Human Emulator доступен любой код на php. Вы можете легко внедрять в программу любые готовые классы и функции и использовать их вместе со встроенным функционалом программы.



Все руководства