Repository: joke2k/faker
Pull request #1102 (2020-01-19 11:34:39)

Provider improvements for Russian locale
### What does this changes

Errors in Address and Automotive Providers were fixed, also Bank Provider was expanded.

### What was wrong

There were some errors in street address, region name and license plate generation.

### How this fixes it
`street_name()`, `region()`, and `license_plate()` methods were fixed.
Bank Provider now generates bank identification code, correspondent account and checking account. They are necessary in various Russian financial documents.

Tests also provided.




fcurella: Thank you! ✨ 

Patch:
diff --git a/faker/providers/address/ru_RU/__init__.py b/faker/providers/address/ru_RU/__init__.py
index ee51c73c..bed66a67 100644
--- a/faker/providers/address/ru_RU/__init__.py
+++ b/faker/providers/address/ru_RU/__init__.py
@@ -11,7 +11,7 @@ class Provider(AddressProvider):
                               '{{street_name}}, д. {{building_number}} стр. {{building_number}}')
     address_formats = ('{{city}}, {{street_address}}, {{postcode}}', )
     postcode_formats = ('######',)
-    building_number_formats = ('###', '##', '#', '#/#')
+    building_number_formats = ('%##', '%#', '%', '%/%')
 
     city_prefixes = ('г.', 'п.', 'к.', 'с.', 'д.', 'клх', 'ст.')
 
@@ -131,21 +131,22 @@ class Provider(AddressProvider):
         '1 Мая', '9 мая', 'Тукая',
     )
 
-    street_titles_irregular_masc = (
-        'Полевой', 'Луговой', 'Степной', 'Заводской', 'Береговой',
-        'Речной', 'Трудовой', 'Ключевой', 'Мостовой', 'Кольцевой',
-        'Боровой', 'Донской', 'Морской', 'Сенной', 'Прудовой',
-        'Большрй', 'Окружной', 'Хуторской', 'Логовой', 'Моховой',
-        'Угловой', 'Слободской', 'Путевой', 'Городской', 'Рабочий',
-        'Верхний', 'Тихий', 'Широкий', 'Нижний', 'Дальний',
-        'Крайний', 'Казачий', 'Весенний', 'Средний', 'Короткий',
-        'Осенний', 'Проезжий', 'Высокий',
-    )
+    street_titles_irregular_masc = {
+        'Полевая': 'Полевой', 'Луговая': 'Луговой', 'Степная': 'Степной', 'Заводская': 'Заводской',
+        'Береговая': 'Береговой', 'Речная': 'Речной', 'Трудовая': 'Трудовой', 'Ключевая': 'Ключевой',
+        'Мостовая': 'Мостовой', 'Кольцевая': 'Кольцевой', 'Боровая': 'Боровой', 'Донская': 'Донской',
+        'Морская': 'Морской', 'Сенная': 'Сенной', 'Прудовая': 'Прудовой', 'Большая': 'Большой',
+        'Окружная': 'Окружной', 'Хуторская': 'Хуторской', 'Логовая': 'Логовой', 'Моховая': 'Моховой',
+        'Угловая': 'Угловой', 'Слободская': 'Слободской', 'Путевая': 'Путевой', 'Городская': 'Городской',
+        'Рабочая': 'Рабочий', 'Верхняя': 'Верхний', 'Тихая': 'Тихий', 'Широкая': 'Широкий', 'Нижняя': 'Нижний',
+        'Дальняя': 'Дальний', 'Крайняя': 'Крайний', 'Казачья': 'Казачий', 'Весенняя': 'Весенний', 'Средняя': 'Средний',
+        'Короткая': 'Короткий', 'Осенняя': 'Осенний', 'Проезжая': 'Проезжий', 'Высокая': 'Высокий',
+    }
 
-    street_titles_irregular_neu = (
-        'Весеннее', 'Верхнее', 'Нижнее', 'Среднее', 'Дальнее',
-        'Крайнее', 'Казачье', 'Рабочее', 'Осеннее', 'Проезжее',
-    )
+    street_titles_irregular_neu = {
+        'Весенняя': 'Весеннее', 'Верхняя': 'Верхнее', 'Нижняя': 'Нижнее', 'Средняя': 'Среднее', 'Дальняя': 'Дальнее',
+        'Крайняя': 'Крайнее', 'Казачья': 'Казачье', 'Рабочая': 'Рабочее', 'Осеняя': 'Осеннее', 'Проезжая': 'Проезжее',
+    }
 
     city_names = (
         'Абакан', 'Абинск', 'Агата', 'Агинское (Забайк.)', 'Адлер', 'Адыгейск',
@@ -358,18 +359,14 @@ class Provider(AddressProvider):
 
     def region(self):
         regions_suffix = self.random_element(self.region_suffixes)
-        region_name = ''
-        result = region_name + ' ' + regions_suffix
         if regions_suffix == 'респ.':
-            region_name = self.random_element(self.region_republics)
-            result = regions_suffix + ' ' + region_name
+            return regions_suffix + ' ' + self.random_element(self.region_republics)
         elif regions_suffix == 'край':
-            region_name = self.random_element(self.region_krai)
+            return self.random_element(self.region_krai) + ' ' + regions_suffix
         elif regions_suffix == 'обл.':
-            region_name = self.random_element(self.region_oblast)
+            return self.random_element(self.region_oblast) + ' ' + regions_suffix
         elif regions_suffix == 'АО':
-            region_name = self.random_element(self.region_ao)
-        return result
+            return self.random_element(self.region_ao) + ' ' + regions_suffix
 
     def street_suffix(self):
         return self.random_element(self.street_suffixes)
@@ -381,16 +378,18 @@ class Provider(AddressProvider):
         suffix = self.street_suffix()
         street = self.street_title()
         stem = street[:-2]
-        inflexion = ''
         result = street
-        if street not in self.street_titles_noflex:
-            if not (suffix in self.street_suffixes_fem and (stem in self.street_titles_irregular_masc
-                                                            or stem in self.street_titles_irregular_neu)):
-                if suffix in self.street_suffixes_masc:
-                    result = stem + inflexion
-                    inflexion = 'ый'
+        if street not in self.street_titles_noflex and suffix not in self.street_suffixes_fem:
+            if suffix in self.street_suffixes_masc:
+                if street in self.street_titles_irregular_masc.keys():
+                    result = self.street_titles_irregular_masc[street]
+                else:
+                    result = stem + 'ый'
                     if stem.endswith('ск') or stem.endswith('цк'):
-                        inflexion = 'ий'
-                elif suffix in self.street_suffixes_neu:
-                    inflexion = 'ое'
+                        result = stem + 'ий'
+            elif suffix in self.street_suffixes_neu:
+                if street in self.street_titles_irregular_neu.keys():
+                    result = self.street_titles_irregular_neu[street]
+                else:
+                    result = stem + 'ое'
         return suffix + ' ' + result
diff --git a/faker/providers/automotive/ru_RU/__init__.py b/faker/providers/automotive/ru_RU/__init__.py
index ab9456b6..9bfdd7f0 100644
--- a/faker/providers/automotive/ru_RU/__init__.py
+++ b/faker/providers/automotive/ru_RU/__init__.py
@@ -197,18 +197,30 @@ class Provider(AutomotiveProvider):
     )
 
     license_plate_formats = (
-        '{{plate_letter}}###{{plate_letter}}{{plate_letter}}{{plate_suffix}}',
-        '{{plate_letter}}{{plate_letter}}###{{plate_suffix}}',
-        '{{plate_letter}}{{plate_letter}}####{{plate_suffix}}',
-        '####{{plate_letter}}{{plate_letter}}{{plate_suffix}}',
-        '###CD#{{plate_suffix}}',
-        '###D###{{plate_suffix}}',
-        '###T###{{plate_suffix}}',
-        '{{plate_letter}}####{{plate_suffix}}',
-        '###{{plate_letter}}{{plate_suffix}}',
-        '####{{plate_letter}}{{plate_suffix}}',
-        'K{{plate_letter}}{{plate_letter}}###{{plate_suffix}}',
-        'C{{plate_letter}}{{plate_letter}}###{{plate_suffix}}',
+        # Private vehicle plate
+        '{{plate_letter}}{{plate_number}}{{plate_letter}}{{plate_letter}} {{plate_suffix}}',
+        # Public transport plate
+        '{{plate_letter}}{{plate_letter}}{{plate_number}} {{plate_suffix}}',
+        # Trailer plate
+        '{{plate_letter}}{{plate_letter}}{{plate_number_extra}} {{plate_suffix}}',
+        # Police forces vehicle plate
+        '{{plate_letter}}{{plate_number_extra}} {{plate_suffix}}',
+        # Military vehicle plate
+        '{{plate_number_extra}}{{plate_letter}}{{plate_letter}} {{plate_suffix}}',
+        # Diplomatic vehicles
+        '{{plate_number_special}} {{plate_suffix}}',
+    )
+
+    plate_number_formats = (
+        '###',
+    )
+
+    plate_extra_formats = (
+        '####',
+    )
+
+    plate_special_formats = (
+        '00#CD#', '00#D###', '00#T###',
     )
 
     def license_plate(self):
@@ -218,8 +230,17 @@ class Provider(AutomotiveProvider):
     def plate_letter(self):
         return self.random_element(self.license_plate_letters)
 
+    def plate_number(self):
+        return self.numerify(self.random_element(self.plate_number_formats))
+
+    def plate_number_extra(self):
+        return self.numerify(self.random_element(self.plate_extra_formats))
+
+    def plate_number_special(self):
+        return self.numerify(self.random_element(self.plate_special_formats))
+
     def plate_suffix(self):
-        return self.random_element(self.license_plate_letters)
+        return self.random_element(self.license_plate_suffix)
 
     def vehicle_category(self):
         return self.random_element(self.vehicle_categories)
diff --git a/faker/providers/bank/ru_RU/__init__.py b/faker/providers/bank/ru_RU/__init__.py
new file mode 100644
index 00000000..affe1a9c
--- /dev/null
+++ b/faker/providers/bank/ru_RU/__init__.py
@@ -0,0 +1,156 @@
+from .. import Provider as BankProvider
+
+
+class Provider(BankProvider):
+    country_code = 'RU'
+
+    """
+    See https://ru.wikipedia.org/wiki/Коды_субъектов_Российской_Федерации
+    """
+    region_codes = (
+        '01', '03', '04', '05', '07', '08', '10', '11', '12', '14', '15', '17', '18', '19', '20', '22',
+        '24', '25', '26', '27', '28', '29', '30', '32', '33', '34', '35', '36', '37', '38', '40', '41',
+        '42', '44', '45', '46', '47', '49', '50', '52', '53', '54', '56', '57', '58', '60', '61', '63',
+        '64', '65', '66', '67', '68', '69', '70', '71', '73', '75', '76', '77', '78', '79', '80', '81',
+        '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97',
+        '98', '99', '111', '118', '7110', '718', '7114', '719',
+    )
+
+    department_code_formats = (
+        '0#', '1#', '2#', '3#', ' 4#', '5#', '6#', '7#', '8#', '9#',
+    )
+
+    credit_organization_code_formats = (
+        '05#', '06#', '07#', '08#', '09#', '1##', '2##', '3##', '4##', '5##', '6##', '7##', '8##', '9##',
+    )
+
+    checking_account_codes = [str(i) for i in range(102, 110)] + ['203', '204'] + [str(i) for i in range(301, 330)] + \
+                             [str(i) for i in range(401, 409)] + [str(i) for i in range(411, 426)] + ['430'] + \
+                             [str(i) for i in range(501, 527)]
+
+    organization_codes = (
+        '01', '02', '03', '04',
+    )
+
+    # See https://ru.wikipedia.org/wiki/Общероссийский_классификатор_валют
+    currency_codes = (
+        '008', '012', '032', '036', '044', '048', '050', '051', '052', '060', '064', '068', '072', '084', '090', '096',
+        '104', '108', '116', '124', '132', '136', '144', '152', '156', '170', '174', '188', '191', '192', '203', '208',
+        '214', '222', '230', '232', '238', '242', '262', '270', '292', '320', '324', '328', '332', '340', '344', '348',
+        '352', '356', '360', '364', '368', '376', '388', '392', '398', '400', '404', '408', '410', '414', '417', '418',
+        '422', '426', '430', '434', '440', '446', '454', '458', '462', '478', '480', '484', '496', '498', '504', '512',
+        '516', '524', '532', '533', '548', '554', '558', '566', '578', '586', '590', '598', '600', '604', '608', '634',
+        '643', '646', '654', '678', '682', '690', '694', '702', '704', '706', '710', '728', '748', '752', '756', '760',
+        '764', '776', '780', '784', '788', '800', '807', '810', '818', '826', '834', '840', '858', '860', '882', '886',
+        '894', '901', '931', '932', '933', '934', '936', '937', '938', '940', '941', '943', '944', '946', '947', '948',
+        '949', '950', '951', '952', '953', '959', '960', '961', '962', '963', '964', '968', '969', '970', '971', '972',
+        '973', '975', '976', '977', '978', '980', '981', '985', '986', '997', '998', '999',
+    )
+
+    """
+    The list of Russian banks is based on Central Bank of Russia statistics
+    See http://cbr.ru/credit/coreports/ko17012020.zip
+    """
+    banks = (
+        'Абсолют Банк', 'Авангард', 'Аверс', 'Автоградбанк', 'Автокредитбанк', 'Автоторгбанк', 'Агора',
+        'Агропромкредит', 'Агророс', 'Азиатско-Тихоокеанский Банк', 'Азия-Инвест Банк', 'Айсибиси Банк',
+        'АК Барс', 'Акибанк', 'Акрополь', 'Актив Банк', 'Акцепт', 'Александровский', 'Алеф-Банк', 'Алмазэргиэнбанк',
+        'Алтайкапиталбанк', 'Алтынбанк', 'Альба Альянс', 'Альтернатива', 'Альфа-Банк', 'Америкэн Экспресс Банк',
+        'Апабанк', 'Аресбанк', 'Арзамас', 'Байкалинвестбанк', 'Байкалкредобанк', 'Балаково-Банк', 'Балтинвестбанк',
+        'Банк "Санкт-Петербург"', 'Банк "СКС"', 'Банк 131', 'Банк Берейт', 'Банк Дом.рф',
+        'Банк Жилищного Финансирования', 'Банк Зенит', 'Банк Зенит Сочи', 'Банк Интеза', 'Банк Казани',
+        'Банк Корпоративного Финансирования', 'Банк Кредит Свисс (Москва)', 'Банк Оранжевый', 'Банк Оренбург',
+        'Банк ПСА Финанс Рус', 'Банк Раунд', 'Банк Реалист', 'Банк РМП', 'Банк РСИ', 'Банк СГБ',
+        'Банк Стандарт-Кредит', 'Банк Финам', 'Банк ЧБРР', 'ББР Банк', 'Белгородсоцбанк', 'Бест Эффортс Банк',
+        'Бизнес-Сервис-Траст', 'БКС Банк', 'БМ-Банк', 'БМВ Банк', 'БНП Париба Банк', 'Братский АНКБ', 'Быстробанк',
+        'Бэнк Оф Чайна', 'Вакобанк', 'Великие Луки Банк', 'Венец', 'Веста', 'Викинг', 'Витабанк', 'Вкабанк',
+        'Владбизнесбанк', 'Внешфинбанк', 'Возрождение', 'Вологжанин', 'Восточный', 'ВРБ',
+        'Всероссийский Банк Развития Регионов', 'ВТБ', 'Вуз-Банк', 'Вятич', 'Газнефтьбанк', 'Газпромбанк',
+        'Газтрансбанк', 'Газэнергобанк', 'Гарант-Инвест', 'Генбанк', 'Геобанк', 'Гефест', 'Глобус',
+        'Голдман Сакс Банк', 'Горбанк', 'Гута-Банк', 'Далена', 'Дальневосточный Банк', 'Денизбанк Москва', 'Держава',
+        'Дж.П. Морган Банк Интернешнл', 'Джей Энд Ти Банк', 'Дойче Банк', 'Долинск', 'Дом-Банк', 'Донкомбанк',
+        'Дон-Тексбанк', 'Дружба', 'ЕАТП Банк', 'Евразийский Банк', 'Евроазиатский Инвестиционный Банк', 'Евроальянс',
+        'Еврофинанс Моснарбанк', 'Екатеринбург', 'Енисейский Объединенный Банк', 'Ермак', 'Живаго Банк',
+        'Запсибкомбанк', 'Заречье', 'Заубер Банк', 'Земельный', 'Земский Банк', 'Зираат Банк (Москва)', 'Ижкомбанк',
+        'ИК Банк', 'Икано Банк', 'Инбанк', 'Инвестторгбанк', 'Инг Банк (Евразия)', 'Интерпрогрессбанк',
+        'Интерпромбанк', 'ИРС', 'ИС Банк', 'ИТ Банк', 'Итуруп', 'Ишбанк', 'Йошкар-Ола', 'Калуга',
+        'Камский Коммерческий Банк', 'Капитал', 'Кетовский Коммерческий Банк', 'Киви Банк', 'Классик Эконом Банк',
+        'Кольцо Урала', 'Коммерцбанк (Евразия)', 'Коммерческий Индо Банк', 'Консервативный Коммерческий Банк',
+        'Континенталь', 'Космос', 'Костромаселькомбанк', 'Кошелев-Банк', 'Креди Агриколь Киб', 'Кредит Европа Банк',
+        'Кредит Урал Банк', 'Кремлевский', 'Крокус-Банк', 'Крона-Банк', 'Кросна-Банк', 'КС Банк', 'Кубань Кредит',
+        'Кубаньторгбанк', 'Кузбассхимбанк', 'Кузнецкбизнесбанк', 'Кузнецкий', 'Кузнецкий Мост', 'Курган',
+        'Курскпромбанк', 'Кэб Эйчэнби Банк', 'Ланта-Банк', 'Левобережный', 'Локо-Банк', 'Майкопбанк', 'Майский',
+        'Максима', 'МБА-Москва', 'МВС Банк', 'Мегаполис', 'Международный Финансовый Клуб', 'Мерседес-Бенц Банк Рус',
+        'Металлинвестбанк', 'Металлург', 'Меткомбанк', 'Мидзухо Банк (Москва)', 'Мир Бизнес Банк', 'МКБ', 'Модульбанк',
+        'Морган Стэнли Банк', 'Морской Банк', 'Москва-Сити', 'Московский Индустриальный Банк',
+        'Московский Коммерческий Банк', 'Московский Кредитный Банк', 'Московский Нефтехимический Банк',
+        'Московский Областной Банк', 'Московское Ипотечное Агентство', 'Москоммерцбанк', 'МС Банк Рус', 'МСКБ',
+        'МСП Банк', 'МТИ Банк', 'МТС-Банк', 'Муниципальный Камчатпрофитбанк', 'Нальчик', 'Народный Банк',
+        'Народный Банк Тувы', 'Народный Доверительный Банк', 'Натиксис Банк', 'Национальный Банк Сбережений',
+        'Национальный Инвестиционно-Промышленный', 'Национальный Резервный Банк', 'Национальный Стандарт', 'НБД-Банк',
+        'Невастройинвест', 'Нейва', 'Нефтепромбанк', 'НИБ', 'Нижневолжский Коммерческий Банк', 'Нико-Банк', 'НК Банк',
+        'Новикомбанк', 'Новобанк', 'Новокиб', 'Новый Век', 'Новый Московский Банк', 'Нокссбанк', 'Ноосфера',
+        'Норвик Банк', 'Нордеа Банк', 'НС Банк', 'НФК', 'Объединенный Банк Республики', 'Объединенный Капитал',
+        'Онего', 'Оней Банк', 'Орбанк', 'Оргбанк', 'ОТП Банк', 'Первоуральскбанк', 'Первый Дортрансбанк',
+        'Первый Инвестиционный Банк', 'Первый Клиентский Банк', 'Пересвет', 'Пермь',
+        'Петербургский Социальный Ком. Банк', 'Платина', 'Плюс Банк', 'Пойдём!', 'Почта Банк', 'Почтобанк',
+        'Приморский Территориальный', 'Приморье', 'Примсоцбанк', 'Приобье', 'Прио-Внешторгбанк', 'Прокоммерцбанк',
+        'Проминвестбанк', 'Промсвязьбанк', 'Промсельхозбанк', 'Промтрансбанк', 'Профессионал Банк',
+        'Профессиональный Инвестиционный Банк', 'Прохладный', 'Развитие-Столица', 'Райффайзенбанк',
+        'РБА', 'Ренессанс Кредит', 'Рента-Банк', 'Ресо Кредит', 'Республиканский Кредитный Альянс', 'Ресурс-Траст',
+        'РН Банк', 'Росбанк', 'Росбизнесбанк', 'Росгосстрах Банк', 'Росдорбанк', 'Роскосмосбанк', 'Россельхозбанк',
+        'Российская Финансовая Корпорация', 'Российский Национальный Коммерческий Банк', 'Россита-Банк', 'Россия',
+        'Ростфинанс', 'Росэксимбанк', 'Роял Кредит Банк', 'Руна-Банк', 'Руснарбанк', 'Русский Банк Сбережений',
+        'Русский Региональный Банк', 'Русский Стандарт', 'Русфинанс Банк', 'Русьуниверсалбанк', 'РФИ Банк',
+        'Саммит Банк', 'Санкт-Петербургский Банк Инвестиций', 'Саратов', 'Саровбизнесбанк', 'Сбербанк России',
+        'Связь-Банк', 'СДМ-Банк', 'Севастопольский Морской Банк', 'Северный Морской Путь', 'Северный Народный Банк',
+        'Северстройбанк', 'Севзапинвестпромбанк', 'Сельмашбанк', 'Сервис Резерв', 'Сетелем Банк', 'СИАБ', 'Сибсоцбанк',
+        'Синко-Банк', 'Система', 'Сити Инвест Банк', 'Ситибанк', 'СКБ-Банк', 'Славия', 'Славянбанк',
+        'Славянский Кредит', 'Снежинский', 'Собинбанк', 'Совкомбанк', 'Современные Стандарты Бизнеса', 'Соколовский',
+        'Солид Банк', 'Солидарность', 'Социум-Банк', 'Союз', 'Спецстройбанк', 'Спиритбанк', 'Спутник',
+        'Ставропольпромстройбанк', 'Столичный Кредит', 'Стройлесбанк', 'Сумитомо Мицуи Рус Банк', 'Сургутнефтегазбанк',
+        'СЭБ Банк', 'Таврический Банк', 'Таганрогбанк', 'Тайдон', 'Тамбовкредитпромбанк', 'Татсоцбанк', 'Тексбанк',
+        'Тендер-Банк', 'Тимер Банк', 'Тинькофф Банк', 'Тойота Банк', 'Тольяттихимбанк', 'Томскпромстройбанк', 'Торжок',
+        'Транскапиталбанк', 'Трансстройбанк', 'Траст', 'Тэмбр-Банк', 'Углеметбанк', 'Унифондбанк', 'Уралпромбанк',
+        'Уралсиб', 'Уралфинанс', 'Уральский Банк Реконструкции и Развития', 'Уральский Финансовый Дом', 'УРИ Банк',
+        'Финанс Бизнес Банк', 'Финсервис', 'ФК Открытие', 'Фольксваген Банк Рус', 'Фора-Банк', 'Форбанк', 'Форштадт',
+        'Фридом Финанс', 'Хакасский Муниципальный Банк', 'Химик', 'ХКФ Банк', 'Хлынов', 'Центрально-Азиатский',
+        'Центр-Инвест', 'Центрокредит', 'ЦМРБанк', 'Чайна Констракшн Банк', 'Чайнасельхозбанк', 'Челиндбанк',
+        'Челябинвестбанк', 'Эйч-Эс-Би-Си Банк (РР)', 'Эко-Инвест', 'Экономбанк', 'Экси-Банк', 'Экспобанк',
+        'Экспресс-Волга', 'Элита', 'Эм-Ю-Эф-Джи Банк (Евразия)', 'Энергобанк', 'Энергомашбанк', 'Энерготрансбанк',
+        'Эс-Би-Ай Банк', 'Ю Би Эс Банк', 'Юг-Инвестбанк', 'ЮМК Банк', 'Юникредит Банк', 'Юнистрим', 'Яринтербанк',
+    )
+
+    """
+    BIC is a bank identification code that is used in Russia
+    See https://ru.wikipedia.org/wiki/Банковский_идентификационный_код
+    """
+
+    def bic(self):
+        region = self.random_element(self.region_codes)
+        department_code = self.numerify(self.random_element(self.department_code_formats))
+        credit_organization_code = self.numerify(self.random_element(self.credit_organization_code_formats))
+        return '04' + region + department_code + credit_organization_code
+
+    """
+    Correspondent account is established to handle various financial operations between financial institutions
+    See https://en.wikipedia.org/wiki/Корреспондентский_счёт
+    """
+
+    def correspondent_account(self):
+        credit_organization_code = self.numerify(self.random_element(self.credit_organization_code_formats))
+        return '301' + self.numerify('#' * 14) + credit_organization_code
+
+    """
+    Checking account is used in banks to handle financial operations of clients
+    See https://ru.wikipedia.org/wiki/Расчётный_счёт
+    """
+
+    def checking_account(self):
+        account = self.random_element(self.checking_account_codes)
+        organization = self.random_element(self.organization_codes)
+        currency = self.random_element(self.currency_codes)
+        return account + organization + currency + self.numerify('#' * 12)
+
+    def bank(self):
+        return self.random_element(self.banks)
diff --git a/faker/providers/company/ru_RU/__init__.py b/faker/providers/company/ru_RU/__init__.py
index a515ea76..63034742 100644
--- a/faker/providers/company/ru_RU/__init__.py
+++ b/faker/providers/company/ru_RU/__init__.py
@@ -18,14 +18,155 @@ class Provider(CompanyProvider):
         '{{company_prefix}} «{{last_name}} {{last_name}}»',
         '{{company_prefix}} «{{last_name}}-{{last_name}}»',
         '{{company_prefix}} «{{last_name}}, {{last_name}} и {{last_name}}»',
-        '{{last_name}}',
+        '{{last_name}} {{company_suffix}}',
+        '{{large_company}}',
     )
 
     company_prefixes = (
-        'РАО', 'АО', 'ИП', 'НПО',
+        'РАО', 'АО', 'ИП', 'НПО', 'ЗАО', 'ООО', 'ОАО',
     )
 
+    company_suffixes = (
+        'Инк', 'Инкорпорэйтед', 'и партнеры', 'Групп', 'Лтд', 'Лимитед',
+    )
+
+    # Source: https://www.rbc.ru/rbc500/
+    large_companies = (
+        'Газпром', 'ЛУКОЙЛ', 'Роснефть', 'Сбербанк России', 'Российские железные дороги', 'Ростех', 'Сургутнефтегаз',
+        'X5 Retail Group', 'ВТБ', 'Магнит', 'САФМАР', 'Росатом', 'Российские сети', 'Интер РАО', 'Транснефть',
+        'Татнефть', 'НОВАТЭК', 'Евраз', 'АФК Система', 'En +', 'НЛМК', 'Норникель', 'ГК Мегаполис', 'Газпромбанк',
+        'Русал', 'Аэрофлот — Российские авиалинии', 'Сибур Холдинг', 'Северсталь', 'СУЭК', 'ММК', 'Группа УГМК',
+        'Мобильные телесистемы', 'Металлоинвест', 'Лента', 'Объединенная авиастроительная корпорация', 'РусГидро',
+        'Сахалин Энерджи', 'Т Плюс', 'Группа М.Видео-Эльдорадо', 'Еврохим', 'ВымпелКом',
+        'Банковский холдинг Альфа-банка', 'Объединенная судостроительная корпорация', 'МегаФон', 'Ростелеком', 'ТМК',
+        'Славнефть', 'Тойота Мотор (Toyota)', 'Мечел', 'Автотор холдинг', 'Стройгазмонтаж', 'Дж.Т.И. Россия (JTI)',
+        'Торговая сеть Красное и Белое', 'АК Алроса', 'Дикси Групп', 'ВЭБ.РФ', 'ФМСМ (PMI)', 'Фольксваген Груп Рус',
+        'АвтоВАЗ', 'Леруа Мерлен Восток (Leroi Merlin)', 'Ашан (Auchan)', 'Россельхозбанк', 'ДНС Групп',
+        'ГК ТНС энерго', 'Протек', 'Группа компаний ПИК', 'Объединенная двигателестроительная корпорация',
+        'Независимая нефтегазовая компания', 'Merlion', 'ФосАгро', 'КМР и СНГ (KIA)', 'Катрен', 'Банк ФК Открытие',
+        'Корпорация Тактическое ракетное вооружение', 'Группа Рольф', 'ТАИФ-НК', 'Трансмашхолдинг',
+        'Метро Кэш энд Керри (Metro Cash & Carry)', 'Мостотрест', 'СОГАЗ', 'Эппл Рус (Apple)', 'Арктикгаз',
+        'Нижнекамскнефтехим', '«Томскнефть» ВНК', 'Зарубежнефть', 'ЕвроСибЭнерго', 'Вертолеты России', 'Группа ГАЗ',
+        'Почта России', 'МУМТ (BAT)', 'Стройтранснефтегаз', 'КамАЗ', 'ФК Пульс', 'Полюс', 'Хендэ Мотор СНГ (Hyundai)',
+        'S7 Group', 'Ямал СПГ', 'Группа Содружество', 'ЧТПЗ', 'Иркутская нефтяная компания', 'Русснефть',
+        'Национальная компьютерная корпорация', 'Мерседес-Бенц Рус (Mercedes-Benz)', 'Русэнергосбыт', 'ОМК',
+        'Уралкалий', 'ГК Ташир', 'Компания Газ-Альянс', 'ФортеИнвест', 'Группа Мэйджор', 'Российская электроника',
+        'ГК СНС', 'Сибирский антрацит', "Группа О'кей", 'Мосинжпроект', 'UCL Holding', 'Группа Илим',
+        'Московский кредитный банк', 'Группа Синара', 'Нефтиса', 'Объединенная компания Связной — Евросеть',
+        'Группа ЛСР', 'Т2 РТК Холдинг', 'НЗНП', 'АльфаСтрахование', 'Ланит', 'НПК Уралвагонзавод',
+        'Рено Россия (Renault)', 'Удмуртнефть', 'Нестле Россия (Nestle)', 'Райффайзенбанк (Raiffeisen)',
+        'Техкомпания Хуавэй (Huawei)', 'КДВ Групп', 'Яндекс', 'Мессояханефтегаз', 'БМВ Русланд Трейдинг (BMW)',
+        'Салым Петролеум', 'Данон  (Danone)', 'ЮниКредит Банк (UniCredit)', 'ТД Риф', 'Мираторг', 'Группа Волга-Днепр',
+        'Вайлдберриз', 'Московский метрополитен', 'Полиметалл', 'Группа РЕСО', 'Пепсико холдингс', 'ГК Эфко',
+        'СДС-Уголь', 'ЛокоТех', 'ГК Автомир', 'Совкомбанк', 'ФСК Лидер', 'Марс (Mars)', 'Детский мир',
+        'Группа НПФ Благосостояние', 'Госкорпорация по ОрВД', 'Трансойл', 'ОХК Уралхим',
+        'Каспийский трубопроводный консорциум-Р', 'Тинькофф Банк', 'Fix Price', 'Промсвязьбанк', 'Акрон',
+        'Спортмастер', 'Проктер Энд Гэмбл. Дистрибьюторская компания (Procter & Gamble)',
+        'Eurasia Drilling Company', 'Группа Черкизово', 'ИКЕА Дом (INGKA)', 'Славянск Эко', 'Корпорация ВСМПО-АВИСМА',
+        'Росбанк (Societe General)', 'Монетка', 'Стройсервис', 'ГК Транстехсервис', 'Совкомфлот', 'ВСК',
+        'СБСВ-Ключавто', 'Ингосстрах', 'Сэтл групп', 'Гиперглобус (Bruch-Beteiligungs)', 'Технониколь',
+        'Металлсервис', 'Нефтехимсервис', 'Промышленно-металлургический холдинг',
+        'Урало-Сибирская металлургическая компания', 'Мария-Ра', 'Globaltrans', 'Кубанская нефтегазовая компания',
+        'Авиакомпания ЮТэйр', 'НПФ Газфонд пенсионные накопления', 'Русагро', "Л'Этуаль", 'ЛГ Электроникс Рус (LG)',
+        'Каргилл (Cargill)', 'ВАД', 'Астон', 'Уральские авиалинии', 'Сталепромышленная компания', 'НИПИ НГ Петон',
+        'Бристоль', 'Уралвтормет', 'Нефтетранссервис', 'Казаньоргсинтез', 'Газпром бурение', 'ГК Агро-Белогорье',
+        'Фортум (Fortum)', 'ПК Балтика (Carlsbergfondet)', 'Авилон АГ', 'Шелл Нефть (Shell)', 'Юнипро (Uniper)',
+        'Технологии машиностроения (Техмаш)', 'НПК Объединенная вагонная компания', 'Велесстрой', 'ТД Интерторг',
+        'Юнилевер Русь (Unilever)', 'Солид-товарные рынки', 'Вольво Восток (AB Volvo)', 'Энел Россия', 'Марвел КТ',
+        'ГК Эталон', 'Металлокомплект-М', 'Группа Ренессанс Страхование', 'Военторг', 'Nordgold', 'Сибуглемет',
+        'Акционерный банк Россия', 'ДОМ.РФ', 'Форд Соллерс Холдинг', 'ИКЕА Торг (INGKA)', 'Макдоналдc (McDonald`s)',
+        'Кузбасская топливная компания', 'Хенкель Рус (Henkel)', 'Дон-Строй Инвест',
+        'Главное управление обустройства войск (ГУОВ)', 'СК Росгосстрах', 'Кока-Кола Эйчбиси Евразия (Coca-Cola)',
+        'Хоум Кредит энд Финанс Банк (PPF)', 'Гленкор Агро Мзк (Firada)', 'Mail.Ru Group', 'Монди СЛПК (Mondi)',
+        'НПО Алмаз', 'ММС Рус (Mitsubishi Motors)', 'Объединенные кондитеры', 'Комацу СНГ (Komatsu)',
+        'Национальная медиа группа', 'Агентство по страхованию вкладов (АСВ)', 'Татэнергосбыт', 'Куйбышевазот',
+        'Азбука вкуса', 'Трансбункер', 'Башкирская содовая компания', 'Инвестнефтетрейд', 'Inventive Retail Group',
+        'Самсунг Электроникс Рус Калуга (Samsung)', 'Крокус', 'Гугл (Google)', 'АСЦ-Холдинг',
+        'Новороссийский морской торговый порт', 'Швабе', 'Русская медная компания', 'Евроцемент груп', 'Мосводоканал',
+        'Международный аэропорт Шереметьево', 'Сегежа', 'Р-Фарм', 'Фармстандарт', 'Ростсельмаш',
+        'Транспортная группа FESCO', 'Компания Адамас', 'Метафракс', 'Джонсон & Джонсон (Johnson & Johnson)',
+        'Softline', 'Ягуар ленд ровер', 'Байер', 'Эркафарм', 'Фармперспектива', 'Банк Уралсиб', 'ВО Машиноимпорт',
+        'Кордиант', 'Новосталь', 'ВкусВилл', "Л'Ореаль (L'Oreal)", 'DDS', 'ТОАЗ', 'Банк Санкт-Петербург',
+        'Группа агропредприятий Ресурс', 'Ярче!', 'Ренейссанс Констракшн (Ronesans Holding Anonim Sirketi)',
+        'Санофи Россия (Sanofi)', 'Группа ГМС', 'Северный ветер', 'БСС', 'Скания-Русь (Scania)', 'ГК Фаворит Моторс',
+        'Группа РТК', 'Фармкомплект', 'Нокиан Шина (Nokian)', 'ДСК Автобан', 'Омега Групп', 'Квадра', 'Roust',
+        'ГК Невада (Самбери)', 'Восточный экспресс банк', 'Верисел-трейдинг', 'Гознак',
+        'Фирма Агрокомплекс им. Ткачева', 'Банк Русский стандарт', 'Мазда Мотор Рус (Mazda)', 'Группа Газфонд',
+        'СТД Петрович', 'Беркс', 'Кари', 'Арконик СМЗ', 'Мон Дэлис (Mondelez)', 'Комус', 'Группа Агат',
+        'Великолукский мясокомбинат', 'Верный', 'СДС Азот', 'М Фэшн', 'Белгранкорм-холдинг', 'Группа Нэфис',
+        'ФГ Будущее', 'Глория Джинс', 'Билла (Rewe)', 'Государственная транспортная лизинговая компания',
+        'ФК Гранд Капитал', 'ЭС', 'Компания Металл Профиль', 'ГК Орими Трэйд', 'ГСЛ',
+        'Интернешнл Пейпер (International Paper)', 'Лаборатория Касперского', 'ПСМА Рус', 'Аптечная сеть 36,6',
+        'Тетра Пак (Tetra Pak)', 'Центральная пригородная пассажирская компания', 'Самараэнерго', 'Азур Эйр',
+        'Командор-Холдинг', 'Белуга Групп', 'ТД БелАЗ', 'Мосгортранс', 'Спар Миддл Волга',
+        'Холдинг Транспортные компоненты', 'Московский аэропорт Домодедово', 'Рулог (Havi)', 'Эйч Энд Эм (H&M)',
+        'Концерн Автоматика', 'Татэнерго', 'Трубная грузовая компания', 'Комос Групп', 'Первая тяжеловесная компания',
+        'ОМПК', 'НК Дулисьма', 'Ачимгаз', 'Новосибирскэнергосбыт', 'Компания СИМ-Авто', 'Ситибанк', 'Остин',
+        'Адидас (Adidas)', 'Ферреро Руссия (Ferrero)', 'Пермэнергосбыт', 'РКК Энергия', 'Свеза', 'Росжелдорпроект',
+        'Мазда Соллерс Мануфэкчуринг Рус', 'БСХ Бытовые приборы  (BSH Hausgerate)', 'Московская биржа ММВБ-РТС',
+        'Русэнергоресурс', 'Компания Луис Дрейфус Восток (Louis Dreyfus)', 'ЭР-Телеком Холдинг', 'Соллерс',
+        'Объединенная энергетическая компания', 'Уральские локомотивы', 'ТМК Чермет', 'Загорский трубный завод',
+        'Элко Рус (Elko)', 'Архангельский ЦБК', 'Мособлгаз', 'ДК Рус', 'Энергосбытовая компания Восток',
+        'ГКНПЦ им. М.В.Хруничева', 'Металлоторг', 'Агросила Групп', 'Ман Трак Энд Бас Рус (Volkswagen)',
+        'Петербургский метрополитен', 'ТГК-2', 'Концерн Титан-2', 'Ренейссанс Хэви Индастрис Ronesans Endustri',
+        'Бургер Рус (Burger King)', 'Ozon', 'Сони Электроникс (Sony)', 'Продо', 'Продимекс-Холдинг', 'АвтоГермес',
+        'Railgo', 'Новотранс', 'Новикомбанк', 'Рив Гош', 'Сибирская горно-металлургическая компания',
+        'Сименс (Siemens)', 'Лига ставок', 'Банк Ак Барс', 'Группа Полипластик', 'Водоканал Санкт-Петербурга',
+        'РэйлАльянс', 'Российская телевизионная и радиовещательная сеть', 'Зерно-трейд', 'Ренессанс Кредит',
+        'Роберт Бош (Robert Bosch)', 'ВО Промсырьеимпорт', 'САП СНГ (SAP)', 'А Групп', 'Приосколье', 'Зара СНГ (Zara)',
+        'Модум-транс', 'Эбботт лэбораториз (Abbott Laboratories)', 'Группа Магнезит', 'Газпром автоматизация',
+        'Газэнергосервис', 'Независимая энергосбытовая компания Краснодарского края', 'Группа ЭПМ', 'Минудобрения',
+        'Либхерр-Русланд (Liebherr)', 'Восточная техника (Vost-Tech)', 'Первый канал', 'ГМК Сплав', 'ГК Автодилерство',
+        'НМЖК', 'ВГТРК', 'Неофарм', 'Роскосмос', 'Вита Лайн', 'Краснодарзернопродукт-Экспо', 'Алкоторг', 'Красцветмет',
+        'Касторама Рус (Castorama)', 'Деловые линии', 'ГВСУ по специальным объектам', 'ПКФ ДиПОС', 'Восток-Запад',
+        'Амурская нефтебаза', 'Юг Руси', 'Шнейдер Электрик (Schneider Electric)', 'Сингента (Chemchina)', 'Титан',
+        'Петропавловск', 'Фармимэкс', 'АБ Инбев Эфес (Anheuser-Busch Inbev)', 'ABI Product', 'Профитмед',
+        'ТД Агроторг', 'ТЭК СПБ', 'ТД Ункомтех', 'ОПХ (Heineken)', 'ТГК-16', 'Уральский банк реконструкции и развития',
+        'QIWI', 'СК Согласие', 'Группа Эссен', 'Втормет', 'Эссити (Essity)', 'Hoff (Домашний интерьер)',
+        'Сиско Солюшенз (Cisco)', 'ВО ЖДТ России', 'Купишуз (Lamoda)', 'Делл (Dell)', 'ПСК',
+        'Каменск-Уральский металлургический завод', 'Аргос', 'А.П.Р.', 'ГК 1520', 'Артис-Агро Экспорт', 'Луидор',
+        'Порше Руссланд (Porsche)', 'Денцу Эйджис Си Эс (Dentsu)', 'Эйвон Бьюти Продактс Компани (Avon)',
+        'РКЦ Прогресс', 'Силовые машины', 'АНГК', 'Корпорация Гринн', 'Фаберлик', 'Сибирская сервисная компания',
+        'Банк Возрождение', 'Отисифарм', 'Боэс Констракшн (Boes Construction)', 'Саткинский чугуноплавильный завод',
+        'Алтайвагон', 'ПТК', 'Щекиноазот', 'Волгоградэнергосбыт', 'Русский уголь', 'Трест КХМ', 'РМ Рейл',
+        'Восточная горнорудная компания', 'Группа Стройтрансгаз', 'БАСФ (BASF)', 'Мерида', 'Брок-Инвест-Сервис и К',
+        'Вирлпул Рус (Whirlpool)', 'Карелия Палп', 'Тева (Teva)', 'Media Direction Group',
+        'Якобс Дау Эгбертс Рус (Jacobs Douwe Egberts)', 'ГК Великан', 'Август', 'Транслом', 'ОТП Банк', 'РусВинил',
+        'Системный оператор Единой энергетической системы', 'АСР-Углесбыт', 'ЦЭНКИ', 'Транстрейдойл', 'Росморпорт',
+        'Газнефтетрэйдинг', 'Сладковско-Заречное', 'Кроношпан (Kronoplus)', 'ТЦ Кунцево Лимитед', 'СНПХ',
+        'Кимберли-Кларк (Kimberly-Clark)', 'Катерпиллар Евразия (Caterpillar)', 'Крок инкорпорейтед',
+        'Ашинский металлургический завод', 'Автодом', 'Международный центр', 'Мишлен (Michelin)', 'Картли', 'БелАЗ-24',
+        'Первый завод', 'ГК ЕКС', 'Петролеум Трейдинг', 'Нижфарм (Nidda Midco)', 'Импэкснефтехим',
+        'Вольво Карс (Zhejiang Geely)', 'Мосметрострой', 'ТЭК Мосэнерго', 'Борисхоф 1 (Inchcape)', 'ГК Титан',
+        'ПТК Уголь', 'Авторусь', 'Юг-Авто', 'Нова', 'Метрострой', 'Ресурс', 'Сетевая компания', 'РЕ Трэйдинг (LPP)',
+        'Углетранс', 'ЭйчПи Инк (HP Inc.)', 'ТК Шлюмберже (Schlumberger)', 'ГК Мега-Авто',
+        'Корпорация Электросевкавмонтаж', 'ГК Российские коммунальные системы', 'Запсибгазпром', 'Нефтепродукттрейд',
+        'Сатурн-Р', 'Завод имени Дегтярева', 'Такеда Фармасьютикалс (Takeda Pharmaceutical)', 'Слата супермаркет',
+        'Emex', 'САМ-МБ', '171 Меридиан', 'Армтек', 'Центр финансовых технологий', 'Группа компаний Пионер',
+        'АХ Степь', 'Таграс (ТНГ-Групп)', 'Fonbet', 'Сандоз (Sandoz)', 'Берлин-Хеми А. Менарини (Berlin Chemie)',
+        'ГК Агропромкомплектация', 'МАКС', 'Компания Трасса', 'Башкирэнерго', 'Охрана Росгвардии', 'Гала-Форм',
+        'КРКА Фарма (KRKA)', 'Максидом', 'Нефтехимремстрой', 'Нефтьмагистраль', 'Авеста Фармацевтика (Baby Dream)',
+        'Старттех', 'Конар', 'Нортгаз', 'УГС', 'АББ (ABB)', 'Металлстандарт', 'Балтийская топливная компания',
+        'Мострансавто', 'Аксель-Моторс', 'Группа компаний МИЦ', 'ПК Борец', 'Европа', 'Сибирская аграрная группа',
+        'РТИ', 'Ферронордик машины (Ferronordic)', 'Южуралзолото ГК', 'Прогресс', 'Юг-Нефтепродукт', 'Камский кабель',
+        'Familia', 'Транскапиталбанк', 'А-Ойл', 'Сибтрейд', 'МТС-банк', 'Московская инженерно-строительная компания',
+        'Курганмашзавод', 'Вектрум-К', 'Морской терминал Тамань', 'Таркетт Рус (Tarkett)',
+        'Несте Санкт-Петербург (Neste)', 'Ново-Уренгойская газовая компания', 'Национальная нерудная компания',
+        'Октоблу (Decathlon)', 'Снежная Королева', 'Новартис Фарма (Novartis)', 'Магнолия', 'Техинком',
+        'Дочки-Сыночки', 'Астеллас Фарма', 'General Fueller', 'Автозаправочные комплексы Atan', 'Псковвтормет',
+        'Авиакомпания Икар',
+    )
+
+    def large_company(self):
+        """
+        :example: 'АвтоВАЗ'
+        """
+        return self.random_element(self.large_companies)
+
     def company_prefix(self):
+        """
+        :example: 'ООО'
+        """
         return self.random_element(self.company_prefixes)
 
     def businesses_inn(self):


Test patch:
diff --git a/tests/providers/test_bank.py b/tests/providers/test_bank.py
index 158f4136..d3682c24 100644
--- a/tests/providers/test_bank.py
+++ b/tests/providers/test_bank.py
@@ -62,3 +62,35 @@ class TestEnGB(unittest.TestCase):
     def test_iban(self):
         iban = self.fake.iban()
         assert re.match(r"GB\d{2}[A-Z]{4}\d{14}", iban)
+
+
+class TestRuRU(unittest.TestCase):
+    """Tests the bank provider for ru_RU locale"""
+
+    def setUp(self):
+        self.fake = Faker('ru_RU')
+        Faker.seed(0)
+
+    def test_bban(self):
+        bban = self.fake.bban()
+        assert re.match(r"[A-Z]{4}\d{13}", bban)
+
+    def test_iban(self):
+        iban = self.fake.iban()
+        assert re.match(r"RU\d{2}[A-Z]{4}\d{13}", iban)
+
+    def test_bic(self):
+        bic = self.fake.bic()
+        assert re.match(r"04\d{7,9}", bic)
+
+    def test_correspondent_account(self):
+        correspondent_account = self.fake.correspondent_account()
+        assert re.match(r"301\d{17}", correspondent_account)
+
+    def test_checking_account(self):
+        checking_account = self.fake.checking_account()
+        assert re.match(r"\d{3}0\d{16}", checking_account)
+
+    def test_bank(self):
+        bank = self.fake.bank()
+        assert re.match(r"\D{3,41}", bank)
diff --git a/tests/providers/test_company.py b/tests/providers/test_company.py
index 4a06456d..c97730b7 100644
--- a/tests/providers/test_company.py
+++ b/tests/providers/test_company.py
@@ -2,13 +2,14 @@ import re
 import unittest
 
 from faker import Faker
-from faker.providers.company import ru_RU as ru
 from faker.providers.company.hy_AM import Provider as HyAmProvider
 from faker.providers.company.ja_JP import Provider as JaProvider
 from faker.providers.company.nl_NL import Provider as NlProvider
 from faker.providers.company.pl_PL import Provider as PlProvider
 from faker.providers.company.pl_PL import company_vat_checksum, local_regon_checksum, regon_checksum
 from faker.providers.company.pt_BR import company_id_checksum
+from faker.providers.company.ru_RU import Provider as RuProvider
+from faker.providers.company.ru_RU import calculate_checksum
 from faker.utils.datetime_safe import datetime
 
 
@@ -266,27 +267,27 @@ class TestRuRu(unittest.TestCase):
         Faker.seed(0)
 
     def test_calculate_checksum_nine_digits(self):
-        assert ru.calculate_checksum('164027304') == '7'
-        assert ru.calculate_checksum('629082979') == '0'
-        assert ru.calculate_checksum('0203184580') == '5'
-        assert ru.calculate_checksum('1113145630') == '0'
-        assert ru.calculate_checksum('70517081385') == '1'
-        assert ru.calculate_checksum('60307390550') == '0'
+        assert calculate_checksum('164027304') == '7'
+        assert calculate_checksum('629082979') == '0'
+        assert calculate_checksum('0203184580') == '5'
+        assert calculate_checksum('1113145630') == '0'
+        assert calculate_checksum('70517081385') == '1'
+        assert calculate_checksum('60307390550') == '0'
 
     def test_businesses_inn(self):
         for i in range(self.num_sample_runs):
             inn = self.fake.businesses_inn()
 
             assert len(inn) == 10
-            assert ru.calculate_checksum(inn[:9]) == inn[9]
+            assert calculate_checksum(inn[:9]) == inn[9]
 
     def test_individuals_inn(self):
         for i in range(self.num_sample_runs):
             inn = self.fake.individuals_inn()
 
             assert len(inn) == 12
-            assert ru.calculate_checksum(inn[:10]) == inn[10]
-            assert ru.calculate_checksum(inn[:11]) == inn[11]
+            assert calculate_checksum(inn[:10]) == inn[10]
+            assert calculate_checksum(inn[:11]) == inn[11]
 
     def test_businesses_ogrn(self):
         max_year = datetime.now().year - 2000
@@ -320,3 +321,24 @@ class TestRuRu(unittest.TestCase):
             assert 1 <= int(kpp[0:2]) <= 92
             assert int(kpp[2:4]) > 0
             assert kpp[4:6] in ('01', '43', '44', '45')
+
+    def test_company_prefix(self):
+        prefixes = RuProvider.company_prefixes
+        for i in range(self.num_sample_runs):
+            prefix = self.fake.company_prefix()
+            assert isinstance(prefix, str)
+            assert prefix in prefixes
+
+    def test_company_suffix(self):
+        suffixes = RuProvider.company_suffixes
+        for i in range(self.num_sample_runs):
+            suffix = self.fake.company_suffix()
+            assert isinstance(suffix, str)
+            assert suffix in suffixes
+
+    def test_large_companies(self):
+        companies = RuProvider.large_companies
+        for i in range(self.num_sample_runs):
+            company = self.fake.large_company()
+            assert isinstance(company, str)
+            assert company in companies