×

Проверка ИНН на JavaScript

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

Внимание!

Код в этой записи устарел хоть и работает корректно. Запись оставлена здесь из археологических соображений. Вот тут есть актуальный код проверки ИНН.

Идентификационный номер налогоплательщика (ИНН) — цифровой код, упорядочивающий учёт налогоплательщиков в Российской Федерации. Присваивается как юридическим, так и физическим лицам. Организациям присваивается с 1993 года, индивидуальным предпринимателям — с 1997 года, прочим физическим лицам — с 1999 года (с начала действия первой части Налогового кодекса Российской Федерации).

Подробнее

Алгоритм проверки ИНН несколько сложнее, чем ОГРН, но также не представляет ничего сверхъестественного. Единственная проблема с которой я столкнулся – не все браузеры могут сразу обращаться к строке как к массиву (в IE6 это не работает), поэтому приходится предварительно создавать массив с нужными нам символами на основе входной строки.

Вот и сама функция.

function checkINN(inputNumber){
    //преобразуем в строку
    inputNumber = "" + inputNumber;
    //преобразуем в массив
    inputNumber = inputNumber.split('');
    //для ИНН в 10 знаков
    if((inputNumber.length == 10) && (inputNumber[9] == ((2 * inputNumber[  0] + 4 * inputNumber[1] + 10 * inputNumber[2] + 3 * inputNumber[3] + 5 * inputNumber[4] + 9 * inputNumber[5] + 4 * inputNumber[6] + 6 * inputNumber[7] + 8 * inputNumber[8]) % 11) % 10)){
        return true;
    //для ИНН в 12 знаков
    }else if((inputNumber.length == 12) && ((inputNumber[10] == ((7 * inputNumber[ 0] + 2 * inputNumber[1] + 4 * inputNumber[2] + 10 * inputNumber[3] + 3 * inputNumber[4] + 5 * inputNumber[5] + 9 * inputNumber[6] + 4 * inputNumber[7] + 6 * inputNumber[8] + 8 * inputNumber[9]) % 11) % 10) && (inputNumber[11] == ((3 * inputNumber[ 0] + 7 * inputNumber[1] + 2 * inputNumber[2] + 4 * inputNumber[3] + 10 * inputNumber[4] + 3 * inputNumber[5] + 5 * inputNumber[6] + 9 * inputNumber[7] + 4 * inputNumber[8] + 6 * inputNumber[9] + 8 * inputNumber[10]) % 11) % 10))){
        return true;
    }else{
        return false;
    }
}

На вход она получает ИНН длинной 10 или 12 знаков, на выход возвращает true или false, в зависимости от результатов проверки.

logo