<?php
/**
* Class for generating some random text data, like human first/last/mid names, dates, etc.
* @name class.randomdata.lang-ru.php
* Registering Russian (ru) first & last & patronimic names
* charset: UTF-8
* @Author Alexander Selifonov, <alex [at] selifan {dot} ru>
* @copyright Alexander Selifonov, <alex [at] selifan {dot} ru>
* @version 0.10 (started 2014-01-05)
* modified 2015-04-13
* @Link http://www.selifan.ru
* @license http://opensource.org/licenses/BSD-3-Clause BSD
* PHP version required: 5.4+ !!!
*/
define('UTF', 'UTF-8');
$options = array(
'firstnames' => array(
'm' => array(
'ÐвгуÑÑ‚','Ðвдей','ÐверьÑн','Ðвтоном','Ðгап','Ðгафон','Ðгей','Ðдам','Ðдриан','ÐндриÑн','Ðзарий','Ðким',
'ÐлекÑандр','ÐлекÑей','ÐмвроÑий','ÐмоÑ','Ðнаний','Ðнатолий','Ðндрей','Ðндрон','Ðндроник','Ðникей','Ðникита','ÐниÑим',
'ОниÑим','Ðнтип','Ðнтонин','Ðполлинарий','Ðполлон','Ðрефий','ÐриÑтарх','Ðркадий','ÐÑ€Ñений','Ðртемий','Ðртем',
'Ðрхип','ÐÑкольд','ÐфанаÑий','Ðфиноген','Бажен','Богдан','БолеÑлав','БориÑ','БориÑлав','БоÑн','БрониÑлав','Будимир',
'Вадим','Валентин','Валерий','ВалерьÑн','Варлаам','Варфоломей','ВаÑилий','Вацлав','Велимир','Венедикт','Вениамин','Викентий',
'Виктор','Викторин','ВиÑÑарион','Виталий','Владилен','Владлен','Владимир','ВладиÑлав','ВлаÑ','Ð’Ñеволод','Ð’Ñемил','Ð’ÑеÑлав',
'ВышеÑлав','Ð’ÑчеÑлав','Гаврила','Гавриил','Галактион','Гедеон','Геннадий','Георгий','ГераÑим','Герман','Глеб',
'Гордей','ГоÑтомыÑл','ГремиÑлав','Григорий','Гурий','Давыд','Давид','Данила','Даниил','Дементий',
'Демид','ДемьÑн','ДениÑ','Дмитрий','ДобромыÑл','ДоброÑлав','Дорофей','Евгений','Евграф','Евдоким','Евлампий','ЕвÑей',
'ЕвÑтафий','ЕвÑтигней','Егор','Елизар','ЕлиÑей','ЕмельÑн','Епифан','Еремей','Ермил','Ермолай','Ерофей','Ефим',
'Ефрем','Захар','Зиновий','ЗоÑима','Иван','Игнатий','Игорь','Измаил','Изот','ИзÑÑлав','Иларион','ИльÑ',
'Иннокентий','ИоÑиф','ОÑип','Ипат','Ипатий','Ипполит','Ираклий','ИÑай','ИÑидор','Казимир','КаллиÑтрат','Капитон',
'Карл','Карп','КаÑÑŒÑн','Ким','Кир','Кирилл','Клавдий','Климент','Клементий','Клим','Кондрат','Кондратий',
'Конон','КонÑтантин','Корнил','Корней','Корнилий','Кузьма','КуприÑн','Лавр','Лаврентий','Лазарь','Лев','Леон',
'Леонид','Леонтий','Лонгин','ЛукьÑн','Лучезар','Любим','Любомир','Макар','МакÑим','МакÑимильÑн','Мариан','Марк',
'Мартын','МартьÑн','Матвей','Мефодий','МечиÑлав','Милан','Милен','Мирон','МироÑлав','Митрофан','Михаил','Михей',
'МодеÑÑ‚','МоиÑей','ÐœÑтиÑлав','Ðазар','ÐаркиÑ','Ðатан','Ðаум','ÐеÑтор','Ðикандр','Ðиканор','Ðикита','Ðикифор',
'Ðикодим','Ðиколай','Ðикон','Ðифонт','Олег','Олимпий','Онуфрий','ОреÑÑ‚','ОÑип','ИоÑиф','ОÑтап','Павел',
'Панкратий','Панкрат','Пантелеймон','Панфил','Парамон','Парфен','Пахом','Петр','Пимен','Платон','Поликарп','Порфирий',
'Потап','Прокл','Прокофий','Прохор','Радим','РадиÑлав','Радован','Ратибор','Ратмир','Родион','Роман','РоÑтиÑлав',
'Рубен','РуÑлан','Савва','Савватий','Савелий','СамÑон','Самуил','Светозар','СвÑтополк','СвÑтоÑлав','СеваÑÑ‚ÑŒÑн','Селиван',
'СеливерÑÑ‚','Семен','Серафим','Сергей','Сигизмунд','Сидор','Силантий','СильвеÑÑ‚Ñ€','Симон','Сократ','Соломон','Софон',
'Софрон','Спартак','Спиридон','СтаниÑлав','Степан','СтоÑн','ТараÑ','ТвердиÑлав','Творимир','Терентий','Тимофей','Тимур',
'Тит','Тихон','Трифон','Трофим','УльÑн','УÑтин','Фадей','Федор','ФедоÑий','Федот','ФеликÑ','ФеоктиÑÑ‚',
'Феофан','Ферапонт','Филарет','Филимон','Филипп','ФирÑ','Флорентин','Фока','Фома','Фотий','Фрол','Харитон',
'Харлампий','ХриÑтофор','ЧеÑлав','Ðдуард','Ðммануил','Ðмиль','ÐраÑÑ‚','ÐрнеÑÑ‚','ÐрнÑÑ‚','Ювеналий','Юлиан','Юлий',
'Юрий','Яков','Ян','Якуб','Януарий','Ярополк','ЯроÑлав'
)
,'f' => array(
'ÐвгуÑта','Ðгата','ÐгафьÑ','ÐглаÑ',
'ÐгнеÑÑа','ÐгниÑ','Ðграфена','Ðгриппина','Ðда','Ðделаида','Ðза','Ðлевтина','ÐлекÑандра','Ðлина','ÐлиÑа','Ðлла',
'Ðльбина','ÐнаÑтаÑиÑ','Ðнгелина','ÐниÑÑŒÑ','Ðнна','Ðнтонида','Ðнтонина','ÐнфиÑа','ÐполлинариÑ','Ðриадна','БеатриÑа','Берта',
'БориÑлава','БрониÑлава','Валентина','ВалериÑ','Ванда','Варвара','ВаÑилиÑа','ВаÑÑа','Вера','Вероника','Викторина','ВикториÑ',
'ВиргиниÑ','Влада','Владилена','Владлена','ВладиÑлава','ВлаÑта','Ð’ÑеÑлава','Галина','ГалÑ','Ганна','Генриетта','Глафира',
'ГориÑлава','ДарьÑ','Диана','Дина','Доминика','Домна','Ева','ЕвгеинÑ','ЕвдокиÑ','ЕвлампиÑ','Екатерина','Елена',
'Елизавета','ЕфроÑиньÑ','ЕфроÑиниÑ','Жанна','Зинаида','Злата','ЗоÑ','Изабелла','Изольда','Инга','ИнеÑÑа','Инна',
'Ираида','Ирина','ИÑ','Казимира','КалериÑ','Капитолина','Каролина','Кира','КлавдиÑ','Клара','КлариÑÑа','Клементина',
'Клеопатра','КонкордиÑ','КÑениÑ','Лада','ЛариÑа','ЛеокадиÑ','Лиана','ЛидиÑ','Лилиана','Клеопатра','КонкордиÑ','КÑениÑ',
'Лада','ЛариÑа','ЛеокадиÑ','Лиана','ЛидиÑ','Лилиана','ЛилиÑ','ЛиÑ','Луиза','ЛукерьÑ','Любава','Любовь',
'Любомила','Любомира','Людмила','МайÑ','Мальвина','Маргарита','Марианна','Мариетта','Марина','МариÑ','Марта','Марфа',
'МеланьÑ','МелитриÑа','Милана','Милена','Милица','Мира','МироÑлава','Млада','ÐœÑтиÑлава','Муза','Ðадежда','ÐатальÑ',
'ÐаталиÑ','Ðеонила','Ðика','Ðина','Ðинель','Ðона','ОкÑана','ОктÑбрина','Олимпиада','Ольга','ПелагеÑ','ПоликÑена',
'Полина','ПраÑковьÑ','ПульхериÑ','Рада','РаиÑа','Регина','Рената','Римма','Рогнеда','Роза','РозалиÑ','Розина',
'РоÑтиÑлава','Руфина','Светлана','Серафима','Сильва','СильвиÑ','СаломеÑ','СофьÑ','СтаниÑлава','Стела','Степанида','СуÑанна',
'ТаиÑиÑ','Тамара','ТатьÑна','УльÑна','Фаина','ФедоÑÑŒÑ','Фелицата','Флора','Флорентина','Фатина','Харитина','ХриÑтина',
'Ðвелина','Ðлеонора','Ðльвира','ÐмилиÑ','Ðмма','ЮлиÑ','Ядвига','ЯроÑлава'
)
)
,'lastnames' => array('Смирн','Иван','Сокол',['Кузнецов',1],'Белоголов',['Попов',1],['Попцов',1],'Лебед','Козл','Ðовик','Мороз','Петр',['Волков',1],'ВаÑиль',['Соловьев',1],'Голов','Козырь','Зай'
,'Павл','Семен','Голуб','Виноград','Федор','Михайл','ТараÑ','Бел',['Комаров',2],['Орлов',2],['КиÑелев',1],'Макар','Ðндре','ГуÑÑŒ','КараÑÑŒ','Кузьмин'
,'Ильин','Кулик','ÐлекÑей','ЕвÑей','Степан','Данил','Жук','Фрол','Журавл','Ðиколай','Егор','Ворон','Рыбак','Пан','МакÑим','БелоуÑ'
,'ÐлекÑандр','Сидор','Петр',['Фонарев',1],['Глухарев',1],['Фокин',1],'Молот',['Сергеев',1],['Селиванов',1],'Михей','Ðазар','Ждан','Панфил','Трофим','Лобан','Ðазар'
,'Баран','Кабан','Копыл','Копыт','Топор','Ðбрам','Потап','БелÑк','ÐекраÑ','Ждан','Орех','Ефрем','Сувор','Черн','Калашник','ÐеÑтер'
,'Харитон','Ðгафон','Ларион','ФедоÑей',['Михе',3],'Крюк','Рог','Конон','Дементий','Терентий','Пафнутий','Зиновий','Ðртемий','ÐÑ€Ñений','Шарап'
,'Ефрем',['КонÑтантинов',1],'Ðикон','Лаврентий','Сазон',['Горде',3],'Самойл','БеÑпал','СамÑон','Колоб','КолеÑ','Ключ','Барабан','Пономар','Бондар'
,['Тихи',4],['Темны',4],['Зелены',4],['Белы',4],['Беглы',4]
,'КраÑивый','Малый','Тихорецкий',['Добронравов',1],'Рублев','Кожедуб',['Кожевников',1],['Удальцов',1],['Кулагин',1]
)
,'patrnames' => array(
'm' => array()
,'f' => array()
)
,'lastname_modifier' => 'lastname_modifier_ru'
);
// create patronimnic names from first names
foreach($options['firstnames']['m'] as $mname) {
$last = mb_substr($mname, -2, 2, UTF);
$last3 = mb_substr($mname, -3,3, UTF);
if ($last3 === 'ков') { # Яков - Яковлевич/левна
$options['patrnames']['m'][] = mb_substr($mname, 0,mb_strlen($mname, UTF)-2,UTF).'левич';
$options['patrnames']['f'][] = mb_substr($mname, 0,mb_strlen($mname, UTF)-2,UTF).'левна';
}
elseif ($last === 'ий') {
$options['patrnames']['m'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-2,UTF).'ьевич';
$options['patrnames']['f'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-2,UTF).'ьевна';
}
elseif ($last === 'ей') {
$options['patrnames']['m'][] = mb_substr($mname, 0,-1,UTF).'евич';
$options['patrnames']['f'][] = mb_substr($mname, 0,-1,UTF).'евна';
}
elseif ($last === 'ва' || $last === 'ла') { # Савва, Гаврила, Данила ...
$options['patrnames']['m'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-1,UTF).'ович';
$options['patrnames']['f'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-1,UTF).'овна';
}
elseif ($last === 'ма') { # Кузьма - Кузьмич, Кузьминична
$options['patrnames']['m'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-1,UTF).'ич';
$options['patrnames']['f'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-1,UTF).'инична';
}
elseif ($last === 'ка') { # Фока etc
$options['patrnames']['m'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-1,UTF).'иевич';
$options['patrnames']['f'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-1,UTF).'иевна';
}
elseif ($last === 'рь') { # Лазарь, Бондарь, Пономарь ...
$options['patrnames']['m'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-1,UTF).'евич';
$options['patrnames']['f'][] = mb_substr($mname, 0,mb_strlen($mname,UTF)-1,UTF).'евна';
}
else {
$options['patrnames']['m'][] = $mname . 'ович';
$options['patrnames']['f'][] = $mname . 'овна';
}
}
// reegister data for the language
RandomData::registerLanguage('ru', $options);
# Russian Last Name modifier - adding random postfix
# $base can be an array, to mark "stable" last name (no endings): ['Бондарь',1]
function lastname_modifier_ru($base, $gender='m') {
# $base = ['Горде',3];
# $base = ['Белы',4];
# $base = 'Рублев';
if (is_array($base) && isset($base[1])) {
$ret = $base[0];
$endings = false;
switch($base[1]) {
case 1: break;
case 2: $endings = array('','','Ñкий','ченко'); break; # Комаров => КомаровÑкий, Комаровченко
case 3: $endings = array('ев','йченко','енко'); break; # Горде: => Гордеев, Гордеенко
case 4: $endings = array('й','х'); break; # Белы: Белый, Белых
# ...
}
if ($endings) $ret .= $endings[rand(0,count($endings)-1)];
# echo "modified lastname [$base[1] is : $ret<br>";
}
else {
$last3 = mb_substr($base, mb_strlen($base,UTF)-3, 4,UTF);
$last2 = mb_substr($base, mb_strlen($base,UTF)-2, 4,UTF);
$last1 = mb_substr($base, mb_strlen($base,UTF)-1, 4, UTF);
$pst = false;
$ret = $base;
# Non-standard case in russian lastnames endings
if($last2 === 'ль') {
$pst = array('ьев','енко','ьков');
$off = rand(0, count($pst)-1);
$ret = mb_substr($base,0, mb_strlen($base,UTF)-1,UTF) . $pst[$off];
}
elseif($last2 === 'ÑÑŒ') {
$pst = array('ев','ько','ьков','ь');
$off = rand(0, count($pst)-1);
$ret = mb_substr($base,0, mb_strlen($base,UTF)-1,UTF) . $pst[$off];
}
elseif($last2 === 'ов') {
$pst = array('ьев','ко','ушкин','кин','ченко','ин');
$off = rand(0, count($pst)-1);
$ret .= $pst[$off];
}
elseif($last2 === 'рь') {
$pst = array('ев','енко','ь');
$off = rand(0, count($pst)-1);
$ret = mb_substr($base,0, mb_strlen($base,UTF)-1,UTF) . $pst[$off];
}
elseif ($last2 === 'вл') {
$pst = array('ов','енко','ович','иди','юченко');
$off = rand(0, count($pst)-1);
$ret .= $pst[$off];
}
elseif ($last2 === 'ин') {
$pst = array('','ко','енко','цев');
$off = rand(0, count($pst)-1);
$ret .= $pst[$off];
}
elseif ($last2 === 'ей') {
$pst = array('ев','йко','енко','йцев');
$off = rand(0, count($pst)-1);
$ret = mb_substr($base,0, mb_strlen($base,UTF)-1,UTF) . $pst[$off];
}
elseif ($last2 === 'ай') {
$pst = array('кин','цев','ко');
$off = rand(0, count($pst)-1);
$ret = $base . $pst[$off];
}
elseif ($last2 === 'ий') {
$pst = array('ьев','ьевÑкий');
$off = rand(0, count($pst)-1);
$ret = mb_substr($base,0, mb_strlen($base,UTF)-2,UTF) . $pst[$off];
}
elseif ($last2 === 'ре') {
$pst = array('ев','йченко','йко','йкин');
$off = rand(0, count($pst)-1);
$ret .= $pst[$off];
}
elseif ($last3 === 'лев') {
$pst = array('','Ñкий','ич');
$off = rand(0, count($pst)-1);
$ret .= $pst[$off];
}
elseif ($last1 === 'ч' ) {
$pst = array('ев','енко','евÑкий');
$off = rand(0, count($pst)-1);
$ret .= $pst[$off];
}
elseif ($last1 === 'б' ) {
$pst = array('','','ов');
$off = rand(0, count($pst)-1);
$ret .= $pst[$off];
}
elseif ($last1 === 'ь') {
$pst = array('ев','ко','ков','цов');
$off = rand(0, count($pst)-1);
$ret .= $pst[$off];
}
elseif ($last2 === 'ый') { }
else {
if (in_array($last1, array('а','о','е','и','у','Ñ‹','Ñ','Ñ')))
$pst = array('ков','ков','ков','йко','цев','цин','кин','вич','енко');
elseif (in_array($last1, array('ч')))
$pst = array('ев','евÑкий','арев','кин');
elseif (in_array($last1, array('л')))
$pst = array('ков','овÑкий','Ñев','ов','Ñнин');
else $pst = array('ов','ов','ов','ев','ин','цев','ович','енко');
$off = rand(0, count($pst)-1);
$ret = $base . $pst[$off];
}
}
if($gender === 'f') { // add russian female ending: Воронов -> Воронова ...
$last3 = mb_substr($ret, mb_strlen($ret,UTF)-3, 3,UTF);
$last2 = mb_substr($ret, mb_strlen($ret,UTF)-2, 2,UTF);
$last1 = mb_substr($ret, mb_strlen($ret,UTF)-1, 1, UTF);
if ( in_array($last2, array('oв', 'ев','ин','ын')) ) $ret .= 'а'; # female ending
elseif (in_array($last3, array('хий','кий','ний')) || ($last2==='ой' || $last2==='ый')) $ret = mb_substr($ret,0,mb_strlen($ret,UTF)-2,UTF) . 'аÑ';
}
return $ret;
}
|