СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

| сохранено

H Генератор случайных личностей в черновиках Recovery Mode

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



Он получил название «Генератор случайных личностей». Его основная цель — создать пользователя с минимально повторяющимися данными.
Для такой генерации используется база, в которой более 100 имен, более 100 фамилий, 56 отчеств, более 3000 городов и 20 улиц, которые соединяются между собой в случайном порядке.
К этому всему ещё добавляются случайно сгенерированные номер дома, квартира, номер телефона (который генерируется тоже по частям 8-xxx-yyy-ww-qq), пароль и дата рождения (все числа с 1 по 28, все месяца и года с 1963 по 1995).

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

Посмотреть и пощупать можно тут: randus.pingvi.org
Кому интересно, исходный код:
<?php 
	//Генерируем фамилию
	$famtxt = file('bd/fam.txt'); 
	$famstr = $famtxt[ array_rand($famtxt) ]; 
	unset($famtxt); 

	//Генерируем имя
	$nametxt = file('bd/name.txt'); 
	$namestr = $nametxt[ array_rand($nametxt) ]; 
	unset($nametxt);

	//Генерируем отчество
	$otchtxt = file('bd/otch.txt'); 
	$otchstr = $otchtxt[ array_rand($otchtxt) ]; 
	unset($otchtxt);

	//Генерируем месяц
	$moutxt = file('bd/mou.txt'); 
	$moustr = $moutxt[ array_rand($moutxt) ]; 
	unset($moutxt); 

	//Генерируем улицу
	$streettxt = file('bd/street.txt'); 
	$streetstr = $streettxt[ array_rand($streettxt) ]; 
	unset($streettxt); 

	//Генерируем город
	$cititxt = file('bd/citi.txt'); 
	$citistr = $cititxt[ array_rand($cititxt) ]; 
	unset($cititxt); 

	//Генерируем пароль 
	$chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";  
	$max=12; 
	$size=StrLen($chars)-1; 
	$password=null; 
	while($max--) 
	$password.=$chars[rand(0,$size)];

	//Генерация логина
	function translit($str) {
		$tr = array(
		"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
		"Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
		"Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
		"О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
		"У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
		"Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
		"Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
		"в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"j",
		"з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
		"м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
		"с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
		"ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
		"ы"=>"yi","ь"=>"i","э"=>"e","ю"=>"yu","я"=>"ya",
		"."=>".","?"=>"?","/"=>"_","\\"=>"_",
		"*"=>"_",":"=>":","*"=>"_","\""=>"_","<"=>"_",
		">"=>"_","|"=>"_"
		);
		return strtr($str,$tr);
	};
	$login=translit($famstr).translit($namestr).rand(15, 398);;
	
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8" />
	<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
	<title>Генератор случайных личностей</title>
	<meta name="keywords" content="генератор, случайно, хороший пароль, как придумать логин, одноразовая почта" />
	<meta name="description" content="Генератор случайных имени, даты рождения, логина и пароля." />
	<link href="css/bootstrap.css" rel="stylesheet">
	<link href="css/style.css" rel="stylesheet">
	<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
</head>

<body>

<div class="wrapper">
	<main class="content">
		<div class="ribbon"><div class="ribbon-stitches-top"></div><strong class="ribbon-content"><h1>Генератор случайных личностей</h1></strong><div class="ribbon-stitches-bottom"></div></div>
		<div class="gendata">
			<div class="form-group">
			    <label>Фамилия Имя Отчество</label>
			    <input type="text" class="form-control" value="<?php echo $famstr; ?> <?php echo $namestr; ?> <?php echo $otchstr; ?>">
			</div>
			<div class="form-group">
			    <label>Дата рождения</label>
			    <input type="text" class="form-control" value="<?php echo rand(1, 28); ?> <?php echo $moustr; ?> <?php echo rand(1963, 1995); ?> года">
			</div>
			<div class="form-group">
			    <label>Адрес</label>
			    <input type="text" class="form-control" value="г.<?php echo $citistr; ?>, ул. <?php echo $streetstr; ?>, дом <?php echo rand(1, 98); ?>, квартира <?php echo rand(1, 298); ?>">
			</div>
			<div class="form-group">
			    <label>Номер телефона</label>
			    <input type="text" class="form-control" value="8 (<?php echo rand(111, 999); ?>) <?php echo rand(111, 999); ?>-<?php echo rand(11, 99); ?>-<?php echo rand(11, 99); ?>">
			</div>
			<div class="form-group">
			    <label>Логин</label>
			    <input type="text" class="form-control" value="<?php echo $login; ?>">
			</div>
			<div class="form-group">
			    <label>Пароль</label>
			    <input type="text" class="form-control" value="<?php echo $password; ?>">
			</div>
			<a href="http://temp-mail.ru" class="btn btn-primary" target="_blank">Открыть одноразовую почту</a> 
			<button onClick='parent.location="javascript:location.reload()"' class="btn btn-success">Хочу другого пользователя</button>
			<button type="button" class="btn btn-info" data-toggle="modal" data-target="#about"><span class="glyphicon glyphicon-question-sign"></span></button>
		</div><br><br>
		<small>
			Используя сгенерированные случайным образом данные Вы подтверждаете свою дееспособность и достижение совершеннолетнего возраста.
			Любые совпадения с реальностью являются случайными!
			Мы не несём ответственности за использование Вами полученных данных. <span class="glyphicon glyphicon-user"></span> 18+
		</small><br><br>
		<center><a href="https://db.tt/0PC1J8o1" target="_blank"><img src="css/db.png"></a></center>
	</main>
</div>
<!-- О проекте -->
<div class="modal fade" id="about" tabindex="-1" role="dialog" aria-labelledby="aboutLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="aboutLabel">О проекте</h4>
      </div>
      <div class="modal-body">
        <p>Очень часто нам бывает нужно зарегистрироваться на каком-либо  сайте, но не всегда хочется вводить свои настоящие данные. Что бы не придумывать "фейковые" имена, можно воспользоваться этим сайтов.<br>
        Структура генерации данных настолько различна, что вариант выпадения двух одинаковых пользователей равен почти нулю.</p>
        <p>В базе имеется более 100 имен, более 100 фамилий, 56 отчеств, более 3000 городов и 20 улиц, которые соединяются между собой в случайном порядке. Кроме этого, к этому всему ещё добавляются случайно сгенерированные номер дома, 
        квартира, номер телефона (который генерируется тоже по частям 8-xxx-yyy-ww-qq), пароль и дата рождения (все числа с 1 по 28, все месяца и года с 1963 по 1995).</p>
        <p>Логин создаётся из имени, фамилии и случайного числа от 15 до 398. Всё это позволяет создать по-настоящему уникального случайного пользователя!</p>
        <p>Используя сгенерированные случайным образом данные Вы подтверждаете свою дееспособность и достижение совершеннолетнего возраста.</p>
        <p>Любые совпадения с реальностью являются случайными!<br>Мы не несём ответственности за использование Вами полученных данных.</p>
        <p class="text-right"><b>Для лиц старше 18 лет</b></p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button>
      </div>
    </div>
  </div>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="js/bootstrap.js"></script>
</body>
</html>



Обновление 18:38 16.12.14:
По просьбам из комментариев:
  • Добавлено сохранение данных. Теперь, если нажать вот сюда:

    То начнёт скачиваться txt файл с информацией.
  • Добавил пробел в поле «Адрес» после «г.»
  • При транслите больших букв большой становится только первая (вместо YA будет Ya), мягкий знак исчезает.
+69
45252

комментарии (61)

+10
+11 –1
Melkij ,  
Вы всегда используете настоящие данные?

Отказываюсь такие формы заполнять, закрываю вкладку.
Если это что-то всё-таки нужное мне, но тем не менее смысл передачи данных неясен, то в полях ввода вместо информации пишу отказ в предоставлении информации. Т.е. не выдумываю данные, но и не предоставляю свои.
Кроме номера телефона, его обычно валидируют и отказ не принимают, так что пишу 8 (214) 748 36 47 (этому номеру хуже уже не будет)
+2
lucius ,  
ФИО: «отказ в предоставлении информации»

Теперь понятно, как искать вас в базах данных.
0
Melkij ,   * (был изменён)
Ага, но я это чаще пишу по-английски, ищите Private Person — это я и есть
+1
+4 –3
SayleX ,  
бомба
0
+1 –1
Ezhyg ,  
Хм, как бы не назвали зачинщиком, разжигателем и прочими словами, на волне борьбы с фейковыми аккаунтами.
+6
WebSpider ,  
Вот тут буржуйский аналог такого сервиса, но там ещё есть аватары
randomuser.me/
+8
kalmarius ,  
ru.fakenamegenerator.com/
С группой крови, данными кредитной карты, ростом и и весом
+4
savostin ,  
А вот тут более реальные люди получаются: randomprofile.com/
+1
AVI ,  
Беда с паролями там. Прям не сервис, а троянский конь.
–1
WebSpider ,  
В смысле?
0
maximw ,  
Не хватает двух функций, которые дополняют друг друга:
— сохранение сгенерированного (cookies, localstorage, хеш в url), чтоб можно было потом снова получить свою случайную личность. Скажем, через неделю мне понадобится пароль или дата рождения.
— высылать сгенерированные данные на мыло (тоже способ сохранения случайной личности).
0
+2 –2
maximw ,   * (был изменён)
И при клике на инпут, пусть выделяется сразу весь текст в нем. Удобнее будет, один фиг оттуда копи-паст будет.
+1
pingvi69 ,  
Спасибо за идею, постараюсь реализовать
+2
HaruAtari ,  
Прикрутить бы сюда возможность генерировать их пачками и сохранять в популярных форматах и будет полезная тулза для заполнения таблицы с пользователями тестовыми данными.
+3
kalmarius ,  
+5
rinat_crone ,  
Вот есть джем для руби: github.com/stympy/faker. Под другие ЯП тоже есть библиотеки, гуглите по тому же названию.
+3
dom1n1k ,  
Логично добавить переключалку м/ж.
Ещё не хватает кнопки «скопировать в буфер».

И (это уже от себя) я бы добавил переключение правдоподобие/тролль.
Первая опция генерит как в КДПВ, вторая что-то типа «Затри3,14здюйский Иеромонах Арчибальдович»
0
pingvi69 ,  
Согласен, м/ж добавлю в ближайшее время
0
sledopit ,  
А ещё круто бы добавить отдельное поле или кнопку (лучше поле) «скопировать всю информацию», чтобы можно было в блокнотик фейковых учётных записей добавить (:
+3
+4 –1
pavelpromin ,  
Тогда уж и генератор валидной серии и номера паспорта, инн, снилс
0
kovyl ,  
И кредитных карт, ага.
0
savostin ,  
Ну, это просто
0
RomanL ,  
Желательно со сканом сразу :)
0
Areso ,   * (был изменён)
Это немного не то)
С другой стороны, вряд ли сегодня найдется реальная персона с именем-отчеством Акакий Акакиевич, а для троллинга — самое оно.
А для прекрасного полу — Евлампия Серафимовна… и даже с «огоньком», причем в квадрате)
+1
edogs ,  
Фальшивые аккаунты в соцсетях - вне закона
Роскомнадзор дал разъяснения относительно законности создания в социальных сетях так называемых «фейковых» аккаунтов.

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

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

В связи с этим Роскомнадзор рекомендует пользователям объединиться против фальшивых аккаунтов и писать жалобы в социальные сети уже со ссылкой на свои официальные разъяснения, — отмечает РБК.
www.apn.ru/news/article32801.htm
:)
+4
merlin-vrn ,  
Ну и шли бы они с такими рекомендациями куда-нибудь в Африку, а лучше на Луну.
+1
roodz ,  
«Всех не перевешаете! За меня отомстят товарищи!»
+1
TROODON ,   * (был изменён)
image
Всё в порядке, по лицензии, сайтом могут пользоваться только дееспособные, к ним такое обвинение не предъявят.
+1
bolk ,  
Какой смысл вы в слово «дееспособные» вкладываете?
+1
Aingis ,  
Насколько я понял, это касается того случая, когда кто-то выдаёт себя за другого. Использование вымышленных данных не возбраняется.
+1
and7ey ,  
Номер телефона совсем произвольный? По идеи, код (916, 495 и т.п.) должен соответствовать адресу. А в адрес надо индекс добавить.
0
FSA ,   * (был изменён)
В данном случае совсем произвольный. У Туринской Слободы код Свердловской области и должен как минимум начинаться с 343.
Кстати, адрес тоже явно видно липовый. Я там был. Там больших домов нет.
0
lany ,  
Для адреса надо КЛАДР прикрутить, тогда всё серьёзнее будет
+1
FSA ,   * (был изменён)
+9
Arks ,  
Осталось придумать генератор случайных сайтов с генератором случайных форм для генератора случайных личностей и посмотреть кто кого победит — компьютер компьютер, или компьютер компьютер!
–3
dewil ,   * (был изменён)
Аналог urlzip.ru/rvt4M
–1
yolk ,  
Я как-то делал генератор телефонов phonumbergen.appspot.com/
0
FisHlaBsoMAN ,  
Я для себя тоже подобное писал. Нагуглил базу имён, фамилий и очеств и генерил. Логика практически такая же как у вас, только я не использовал улицы и телефоны.
0
prishelec ,  
В свое время был сайт, который генерировал паспортные данные.
0
Ruckus ,   * (был изменён)
А что, во всех 3000 городах существуют одни и те же 20 улиц? Не говоря уже о случайном доме и квартире. Если нет, то это моментально говорит о том, что данные-подделка. Если уж и подделывать, то надо делать это максимально скрытно, как я считаю.
+1
FisHlaBsoMAN ,  
В различных городах одинаковое наименование улиц встречается очень часто, однако общее количество улиц будет на порядок выше. Я бы выбрал улиц побольше, а вот городов поменьше, а города соответственно побольше. А то будет: пос. Гадюкино, проспект Энгельса д. 154, кв. 350.
+4
Elmot ,  
Ну вот, спалили моего соседа.
0
akamajoris ,  
Кросс-Браун Буллшид Дезоксирибозович. Хм, что-то пошло не так =)
0
mottoman ,  
Надо сделать расширение для браузера, чтобы рандомные данные одной кнопкой заполняли поля на сайте при регистрации.
0
Asimiau ,  
Когда одна заглавная буква после транслитерации становится комбинацией нескольких («Щ»=>«SCH», «Ю»=>«YU», «Я»=>«YA, etc.), в слове это выглядит несколько странно (»YAkov", например). Понятно, что это ни на что не влияет, но глаз режет.
А ещё из «Рудольф» получается «Rudolif'. Мягкий и твердый знаки проще тогда вообще опускать.
0
Jazzis ,  
А почему генерятся только мужские личности, где же женские?
0
autobusiness ,  
Ваш сервис это ответ на «Роскомнадзор занялся борьбой с фейковыми аккаунтами»? На злобу дня)
0
akhmelev ,  
Класс. API с JSON на выходе допилите и боты к вам потянутся ;-).
0
Fatal_Error ,  
Совершенно определенно нужна API ) И не только для роботов
0
Mitch ,  
Еще бы ZIP корелирующий с адресом
Ну и сохранение в 1 клик всего текста было бы удобно, как уже писали выше.
+1
begemot_nn ,  
А когда проект взлетит, на зеленую кнопку подвесить не обновление страницы, а переход на какой-нибудь сайт знакомств
а что? «хочу другого пользователя» — вполне релевантно.
+4
andreymironov ,  
Видели, знаем. А я генерировал когда-то только Ф.И.О. Однако, у меня была потребность генерировать именно смешные инициалы и в больших количествах. Я брал слова русского языка, оканчивающиеся на согласные (р, н, д, з) и просто немного модифицировал их.
Получалось примерно вот так:
Кирасир Подмигович Марафетов
Сонет Пошлякович Хакасевич
Кугуар Снобизмович Зуммерашвили
Платинит Амперметрович Декаэдридзе
Набег Велоболович Дизелистенко
Валах Доминионович Шорникидзе
Тючок Миррович Лощильщикенко
Лысун Нитритович Раввинов
Барон Насадчикович Подорликенко
Менгир Оброкович Капельмейстерашвили
Пригляд Репейникович Пряничникевич
Тиамин Гонококкович Удильникевич
Ледоход Вторникович Агрономашвили
Ферлакур Папуасович Роторов
Тол Стропович Эллипсисов
Бронекатер Переходович Серебрильщикидзе
Роульс Вихорчикович Приседенко
Коверкот Картвелович Остеитов
Рогоз Архиепископович Крякашвили
Поташник Мужланович Разгулидзе
Бетон Тренерович Поваренко
Фиакр Черенщикович Фитинашвили
Каин Тюбингоукладчикович Вездеходчикенко
Негоциант Гранильщикович Гардеробщикевич
Реальгар Залавокович Эркеридзе
Форд Маскарадович Есауленко
Обжин Фехтовальщикович Головотяпашвили
Сеанс Хитонович Воронильщикашвили
Адат Векторметрович Черканевич
Эксцесс Копейщикович Озокеритенко
Сиводрал Подрамокович Педагогов
Хризопраз Пиранометрович Кордебалетидзе
Саман Фриштикович Авторефрижераторидзе
Хазават Подлисокович Кассаторов
+1
JIghtuse ,   * (был изменён)
Вообще, уже несколько лет существуют библиотеки для скриптовых языков для генерации личностей. Первая, о которой услышал — faker для Ruby, есть ещё как минимум для Python, Perl, PHP.
Сам немного поучаствовал в «локализации» пакета faker для Python (выше на него же ссылка). Взял имена и профессии из Википедии и отправил PR на Github. Теперь пакет может генерировать исконно русские личности:
Скрытый текст
Стоян Козлов, Электрик
Конон Никонов, Радиомеханик
Виталий Гришин, Месильщик
Нестор Фадеев, Радиолог
Фотий Богданов, Сурдолог
Павел Кононов, Музыкант
Савелий Сафонов, Литейщик
Спартак Титов, Дипломатический работник
Филарет Дорофеев, Безработный
г-н. Амос Кулагин, Борт-стрелок

Когда делал, вроде бы ещё не было возможности добавлять женские имена. Кстати, желающим поучаствовать — ещё многое можно добавить. Адреса, компании, даты рождения.
0
bubuq ,  
Стоян, Фотий и Амос? Ну может быть, может быть…
0
alexandfox ,  
Пожалуйста, добавьте в исходный код в статье кнопку скачивания информации в формате .txt
0
pingvi69 ,  
А что в ней необычного?
Обычная button с name=«set»
0
alexandfox ,  
Да, но там же еще какой-то код PHP для генерации файла должен быть…
+1
pingvi69 ,  
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='. sprintf('%s.html', $name));
header('Content-Length: '. sizeof($body));
echo $body;

Перед этим записать в $body нужное содержимое txt
0
Pozitronov ,  
Не вижу смысла от подобной забавы. Но если к этому всему делу API прикрутить, будет не плохо.
0
Nordvind ,  
Да, любое приложение сразу нужно, если API есть.
0
VeterVeter ,   * (был изменён)
как-то совсем фейково получается — г. Хабаровск, ул. Путина, дом 37, квартира 210
генератор фейковых личностей?