Очень часто в разнообразных формах ввода данных требуется проверить ИНН на корректность. Делать это нужно в первую очередь на стороне клиента, чтобы избежать повторной загрузки страницы и дать возможность пользователю исправить ошибки.
Внимание!
Код в этой записи устарел хоть и работает корректно. Запись оставлена здесь из археологических соображений. Вот тут есть актуальный код проверки ИНН.
Идентификационный номер налогоплательщика (ИНН) — цифровой код, упорядочивающий учёт налогоплательщиков в Российской Федерации. Присваивается как юридическим, так и физическим лицам. Организациям присваивается с 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, в зависимости от результатов проверки.