К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как сгенерировать ИНН в 1С: алгоритм, готовый код и проверка

Как сгенерировать ИНН в 1С программно: алгоритм контрольной суммы, готовый код для юрлица и ИП, генерация тестовых данных, проверка валидности и типичные ошибки.

Задача сгенерировать ИНН в 1С возникает в двух типовых ситуациях: когда нужно заполнить тестовую базу фиктивными контрагентами для отладки обменов и отчетов, и когда требуется проверить корректность введенного номера до отправки документов в контролирующие органы. В обоих случаях ключ к решению — алгоритм контрольной суммы, утвержденный для ИНН юридических лиц (10 знаков) и физических лиц (12 знаков).

ИНН не является случайным набором цифр. Последняя цифра (у физлиц — две последние) вычисляется по формуле с весовыми коэффициентами. Поэтому «придуманный от руки» номер почти всегда не пройдет проверку ни в 1С, ни в сервисах ФНС, ни в банковских системах. Правильный подход — сгенерировать базовую часть номера и рассчитать контрольные цифры по алгоритму.

Ниже разобраны: структура ИНН и формулы контрольной суммы, готовый код на встроенном языке 1С для генерации и проверки, варианты без программирования, а также ограничения — почему сгенерированные номера нельзя использовать в реальных документах.

Структура ИНН и зачем нужна контрольная сумма

ИНН юридического лица состоит из 10 цифр: первые четыре — код налогового органа, следующие пять — порядковый номер записи, десятая — контрольная цифра. ИНН физического лица и ИП состоит из 12 цифр: код налогового органа (4), номер записи (6) и две контрольные цифры.

Контрольная цифра вычисляется умножением каждой цифры номера на весовой коэффициент, суммированием произведений и взятием остатка от деления на 11 (для 12-значного ИНН применяется двухступенчатый расчет). Если остаток равен 10, контрольная цифра принимается равной 0.

Именно этот механизм используется в типовых конфигурациях 1С: при вводе ИНН контрагента программа проверяет контрольную сумму и выдает предупреждение, если номер не сходится. Генератор, который вы пишете, должен делать обратную операцию — подбирать контрольные цифры так, чтобы проверка проходила.

Алгоритм расчета контрольных цифр

Для 10-значного ИНН используются веса: 2, 4, 10, 3, 5, 9, 4, 6, 8 — по одному на каждую из первых девяти цифр. Сумма произведений делится на 11, остаток от деления на 10 и есть контрольная цифра.

Для 12-значного ИНН расчет двухступенчатый. Первая контрольная цифра (11-я позиция) считается по весам 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 для первых десяти цифр. Вторая контрольная цифра (12-я позиция) — по весам 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8 для первых одиннадцати цифр, включая уже вычисленную 11-ю.

Правило обработки остатка одинаковое: берем остаток от деления суммы на 11, затем остаток от деления на 10. Промежуточное значение 10 автоматически превращается в 0, поэтому отдельная ветка для него не нужна.

Готовый код генерации ИНН на языке 1С

Ниже пример функции, которая генерирует валидный по контрольной сумме ИНН юридического лица. Функция формирует девять случайных цифр и вычисляет десятую.

Функция СгенерироватьИННЮрЛица() Экспорт

Генератор = Новый ГенераторСлучайныхЧисел();

Веса = Новый Массив;

Веса.Добавить(2); Веса.Добавить(4); Веса.Добавить(10);

Веса.Добавить(3); Веса.Добавить(5); Веса.Добавить(9);

Веса.Добавить(4); Веса.Добавить(6); Веса.Добавить(8);

Цифры = Новый Массив;

Сумма = 0;

Для Индекс = 0 По 8 Цикл

Цифра = Генератор.СлучайноеЧисло(0, 9);

Цифры.Добавить(Цифра);

Сумма = Сумма + Цифра * Веса[Индекс];

КонецЦикла;

КонтрольнаяЦифра = (Сумма % 11) % 10;

Цифры.Добавить(КонтрольнаяЦифра);

Результат = "";

Для Каждого Цифра Из Цифры Цикл

Результат = Результат + Строка(Цифра);

КонецЦикла;

Возврат Результат;

КонецФункции

Для 12-значного ИНН логика аналогична, но контрольные цифры считаются последовательно: сначала одиннадцатая по десяти цифрам с весами 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, затем двенадцатая по одиннадцати цифрам с весами 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8.

Обратите внимание на ведущий ноль: если первая случайная цифра окажется нулем, при преобразовании в число он потеряется. Поэтому результат всегда собирайте как строку, а не как число — иначе получите 9-значный «ИНН», который не пройдет проверку длины.

Порядок действий
  1. 1
    Сгенерируйте 9 случайных цифр (для юрлица) или 10 (для физлица)
  2. 2
    Умножьте каждую цифру на соответствующий весовой коэффициент и сложите произведения
  3. 3
    Вычислите контрольную цифру: (Сумма % 11) % 10
  4. 4
    Для 12-значного ИНН повторите расчет для второй контрольной цифры
  5. 5
    Соберите результат строкой, сохраняя ведущие нули
  6. 6
    Проверьте номер функцией валидации перед записью в базу

Функция проверки существующего ИНН

Обратная задача — проверка — решается тем же алгоритмом: пересчитываем контрольные цифры для введенного номера и сравниваем с фактическими. Если совпали — номер формально корректен.

Функция ИННКорректен(ИНН) Экспорт

Если Не (СтрДлина(ИНН) = 10 Или СтрДлина(ИНН) = 12) Тогда

Возврат Ложь;

КонецЕсли;

// Проверка, что все символы — цифры

Для Позиция = 1 По СтрДлина(ИНН) Цикл

Символ = Сред(ИНН, Позиция, 1);

Если СтрНайти("0123456789", Символ) = 0 Тогда

Возврат Ложь;

КонецЕсли;

КонецЦикла;

// Далее пересчет контрольных цифр по весам

// и сравнение с последними символами строки ИНН

Возврат Истина;

КонецФункции

В типовых конфигурациях (БСП — библиотека стандартных подсистем) уже есть готовые механизмы проверки ИНН, например в общем модуле работы с контрагентами. Прежде чем писать свой валидатор, проверьте, не подключена ли БСП — повторная реализация того, что уже есть в конфигурации, усложняет поддержку.

Проверка контрольной суммы подтверждает только формальную корректность номера. Она не гарантирует, что ИНН реально зарегистрирован в ФНС и принадлежит действующему контрагенту — для этого нужен запрос к сервису проверки контрагентов.
ПЗ
Практическое замечание

Генерация ИНН без программирования

Если нужны один-два тестовых номера, писать код необязательно. Есть более простые пути.

Первый вариант — взять реальный ИНН публичной организации из открытых источников (официальные сайты публикуют реквизиты) и использовать его в тестовой базе. Номер гарантированно валиден, но помните: в боевой базе такой ИНН создаст путаницу при обменах с ФНС и банками.

Второй вариант — онлайн-генераторы ИНН, которые реализуют тот же алгоритм контрольной суммы. Они подходят для разовой задачи, но для массового заполнения тестовой базы (сотни контрагентов) программная генерация внутри 1С удобнее: можно сразу создавать элементы справочника с заполненными реквизитами.

Сравнение вариантов

Своя функция в 1С

Подходит для массового заполнения тестовых баз и автотестов; требует прав на изменение конфигурации или внешней обработки

Онлайн-генератор

Быстро для одного-двух номеров; неудобно при массовой генерации, зависит от стороннего сервиса

ИНН реальной организации

Гарантированная валидность без кода; риск конфликтов при обмене данными с внешними системами

Массовое заполнение тестовой базы контрагентами

Типовой сценарий — обработка, которая в цикле создает элементы справочника «Контрагенты» со сгенерированными ИНН, КПП и наименованиями. Здесь есть два практических момента.

Первый — уникальность. Случайные 9 цифр могут повториться, а в большинстве конфигураций на пару «ИНН + КПП» стоит контроль дублей. После генерации проверяйте запросом, нет ли уже контрагента с таким номером, и при совпадении генерируйте заново.

Второй — КПП для юридических лиц. КПП не имеет контрольной суммы, но имеет формат: 4 цифры налогового органа (обычно совпадают с началом ИНН), 2 цифры причины постановки на учет, 3 цифры порядкового номера. Для тестовых данных достаточно сформировать строку вида «770501001», согласовав первые четыре цифры с ИНН.

Типичные ошибки
01
Хранение ИНН как числа — теряются ведущие нули, номер становится невалидным
02
Генерация всех 10 цифр случайно без расчета контрольной — номер не проходит проверку в типовых конфигурациях
03
Игнорирование контроля дублей — обработка падает или создает дубли контрагентов
04
Использование тестовых номеров в рабочей базе — ошибки при отправке отчетности и выставлении счетов-фактур

Ограничения и риски использования сгенерированных номеров

Сгенерированный ИНН — это формально валидный, но несуществующий номер. Он пройдет проверку контрольной суммы, но не пройдет проверку по базе ФНС. Поэтому область его применения строго ограничена тестовыми контурами: отладка обменов, демонстрационные базы, учебные примеры, нагрузочное тестирование.

Использование выдуманных ИНН в реальных документах — счетах-фактурах, декларациях, договорах — недопустимо. Ошибка в реквизитах контрагента может привести к отказу в вычете НДС, требованиям пояснений от налоговой и проблемам при сверках. Перед отправкой отчетности всегда проверяйте реквизиты по официальным сервисам проверки контрагентов.

Частые вопросы

Можно ли сгенерировать ИНН, который принадлежит реальной организации?

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

Почему типовая 1С не принимает мой сгенерированный ИНН?

Чаще всего причина в потере ведущего нуля при хранении номера как числа или в неверном массиве весовых коэффициентов. Проверьте длину строки (ровно 10 или 12 символов) и сверьте веса с эталонным алгоритмом.

Есть ли в типовых конфигурациях готовый генератор ИНН?

Готового генератора в типовых поставках нет — есть только механизмы проверки корректности введенного номера. Генерацию для тестовых целей реализуют самостоятельно через внешнюю обработку или расширение.

Нужно ли генерировать КПП вместе с ИНН?

Для юридических лиц — желательно, так как многие проверки и печатные формы требуют оба реквизита. У КПП нет контрольной суммы, достаточно соблюсти формат: 9 цифр, первые четыре обычно совпадают с началом ИНН.

Отличается ли алгоритм для ИНН иностранных организаций?

Да. ИНН иностранных организаций, зарегистрированных в РФ, имеет свою структуру (начинается с «9909»), и стандартная проверка контрольной суммы для него не применяется. Для тестовых данных такие номера проще брать фиксированными.

Итог

Что важно запомнить

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