Как проверить ИНН, ОГРН и расчётный счёт по контрольной сумме

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

Контрольная сумма не скажет, что компания существует. Но она поймает самые частые ошибки: пропущенную цифру, переставленные соседние цифры, опечатку при перепечатке с PDF.

ИНН организации — 10 цифр

Последняя цифра — контрольная. Первые девять умножают на веса 2, 4, 10, 3, 5, 9, 4, 6, 8, складывают, берут остаток от деления на 11, а затем — на 10.

function isValidInn10(inn: string) {
  const w = [2, 4, 10, 3, 5, 9, 4, 6, 8];
  const sum = w.reduce((s, x, i) => s + x * Number(inn[i]), 0);
  return (sum % 11) % 10 === Number(inn[9]);
}

ИНН предпринимателя — 12 цифр

Контрольных цифр две. Одиннадцатую считают по первым десяти с весами 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, двенадцатую — по первым одиннадцати с весами 3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8. Остаток в обоих случаях — сначала от 11, потом от 10.

ОГРН и ОГРНИП

  • ОГРН (13 цифр): первые 12 цифр как число, остаток от деления на 11, затем на 10 — должен совпасть с 13-й цифрой.
  • ОГРНИП (15 цифр): первые 14 цифр, остаток от деления на 13, затем на 10 — должен совпасть с 15-й.

В JavaScript удобно считать через BigInt — так не нужно думать о точности больших чисел:

const ok = Number(BigInt(ogrnip.slice(0, 14)) % 13n % 10n) === Number(ogrnip[14]);

Расчётный счёт и БИК

Расчётный счёт сам по себе не проверить — контрольная цифра в нём рассчитана вместе с БИК банка. Это называется ключеванием:

  1. Возьмите три последние цифры БИК и припишите к ним 20 цифр счёта — получится 23 цифры.
  2. Умножьте каждую цифру на вес по циклу 7, 1, 3, 7, 1, 3….
  3. Сложите младшие разряды произведений.
  4. Сумма должна делиться на 10.
function isValidAccount(account: string, bik: string) {
  const w = [7, 1, 3];
  const digits = (bik.slice(-3) + account).split('').map(Number);
  const sum = digits.reduce((s, d, i) => s + ((d * w[i % 3]) % 10), 0);
  return sum % 10 === 0;
}

Корреспондентский счёт проверяется так же, только вместо трёх последних цифр БИК берут «0» и пятую-шестую цифры БИК.

Что ещё видно по реквизитам

  • Длина ИНН сразу говорит о типе контрагента: 10 цифр — организация, 12 — ИП или физлицо.
  • Счета юрлиц обычно начинаются на 40702, счета ИП — на 40802. Счёт 407… у предпринимателя — повод перепроверить.
  • БИК российского банка начинается на 04.

В «Трёх Бумагах» это работает автоматически

Когда вы загружаете карточку заказчика, сервис проверяет ИНН, ОГРН или ОГРНИП, расчётный и корреспондентский счёт. Если что-то не сходится, он покажет это до сборки — вместе с тем, какое именно поле выглядит неверно. Загрузите карточку и посмотрите.