Проверка корректности ИНН. Алгоритм и реализация на PHP.

Введенный ИНН 00000000000 - Ошибочен

Сразу приведу пример проверки:



Данная проверка не может гарантировать существование ИНН, она может указать на ошибку в ИНН, например при добавление в базу.


Функция проверки 10 и 12 значных ИНН на PHP

function TestINN($inn)
    {
    $i = (string)$inn;
    if ( !preg_match('/^\d*$/',$i) )
        return false;
    if ( strlen($i)==10 )
        {
        $s = (2*$i{0}+4*$i{1}+10*$i{2}+3*$i{3}+5*$i{4}+9*$i{5}+4*$i{6}+6*$i{7}+8*$i{8})%11;
        if ( $s==10 )
            $s = 0;
        if ( $s==$i{9} )
            return true;
            else return false;
        }
    if ( strlen($i)==12 )
        {
        $s = (7*$i{0}+2*$i{1}+4*$i{2}+10*$i{3}+3*$i{4}+5*$i{5}+9*$i{6}+4*$i{7}+6*$i{8}+8*$i{9})%11;
        if ( $s==10 )
            $s = 0;
        $s2 = (3*$i{0}+7*$i{1}+2*$i{2}+4*$i{3}+10*$i{4}+3*$i{5}+5*$i{6}+9*$i{7}+4*$i{8}+6*$i{9}+8*$i{10})%11;
        if ( $s2==10 )
            $s2 = 0;
        if ( $s==$i{10} and $s2==$i{11} )
            return true;
            else return false;
        }
    return false;
    }

Алгоритм проверки ИНН

Проверка 10 значного ИНН (1 контрольна цифра в конце)

Для примера возьмем 10 значный ИНН 1234567890

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

1) Для расчета контрольного числа следует умножить каждый разряд ИНН (кроме последнего контрольного разряда) на следующие цифры:

  • 1 разряд умножить на 2;       для нашего примера 1*2 = 2;
  • 2 разряд умножить на 4;       для нашего примера 2*4 = 8;
  • 3 разряд умножить на 10;     для нашего примера 3*10 = 30;
  • 4 разряд умножить на 3;       для нашего примера 4*3 = 12;
  • 5 разряд умножить на 5;       для нашего примера 5*5 = 25;
  • 6 разряд умножить на 9;       для нашего примера 6*9 = 54;
  • 7 разряд умножить на 4;       для нашего примера 7*4 = 28;
  • 8 разряд умножить на 6;       для нашего примера 8*6 = 48;
  • 9 разряд умножить на 8;       для нашего примера 9*8 = 72;
  • 10 разряд контрольный, его ни на что умножать не надо.

2) Просуммируем получившиеся числа. Для нашего примера получиться: 2+8+30+12+25+54+28+48+72=279

3) Следующий шаг: получаем остаток от деления на число 11. Для нашего примера это 279/11 остаток 4

3а) Если остаток от деления равен 10, то считать что остаток от деления равен 0.

4) Если полученный остаток равен последней цифре, то ИНН корректен. В нашем примере: полученный остаток 4 не равен последней цифре 0, значит такого ИНН быть не может, просим проверить правильность ввода.



Проверка 12 значного ИНН (2 контрольные цифры)

Для проверки 12 значного ИНН, требуется вычислить 2 контрольных числа. Алгоритм расчета такой же, как у 10 значного ИНН. Различаются лишь веса разрядов.

Для примера возьмем 12 значный ИНН 123456789012

Последние, 11-тое и 12-тое числа ( 1 и 2 ) являются контрольными. Если результаты расчета совпадут с контрольными цифрами - значит такой ИНН корректен.

1-1) Для расчета первого контрольного числа (11-тое по счету 1) умножаем разряды ИНН на следующие цифры

  • 1 разряд умножить на 7;       для нашего примера 1*7 = 7;
  • 2 разряд умножить на 2;       для нашего примера 2*2 = 4;
  • 3 разряд умножить на 4;       для нашего примера 3*4 = 12;
  • 4 разряд умножить на 10;     для нашего примера 4*10 = 40;
  • 5 разряд умножить на 3;       для нашего примера 5*3 = 15;
  • 6 разряд умножить на 5;       для нашего примера 6*5 = 30;
  • 7 разряд умножить на 9;       для нашего примера 7*9 = 63;
  • 8 разряд умножить на 4;       для нашего примера 8*4 = 32;
  • 9 разряд умножить на 6;       для нашего примера 9*6 = 54;
  • 10 разряд умножить на 8;     для нашего примера 0*8 = 0;
  • 11 разряд контрольный, его ни на что умножать не надо.
  • 12 разряд контрольный, его ни на что умножать не надо.

1-2) Просуммируем получившиеся числа. Для нашего примера получиться: 7+4+12+40+15+30+63+32+54+0=257

1-3) Следующий шаг: получаем остаток от деления на число 11. Для нашего примера это 257/11 остаток 4

1-3а) Если остаток от деления равен 10, то считать что остаток от деления равен 0.

1-4) Если полученный остаток равен 11-той цифре, то проверяем следующую контрольную цифру. В нашем примере: полученный остаток 4 не равен 11-той цифре 1, значит такого ИНН быть не может, просим проверить правильность ввода. Но для примера проверим и следующее контрольное число.

2-1) Для расчета второго контрольного числа (12-тое по счету 2) умножаем разряды ИНН на следующие цифры

  • 1 разряд умножить на 3;       для нашего примера 1*3 = 3;
  • 2 разряд умножить на 7;       для нашего примера 2*7 = 14;
  • 3 разряд умножить на 2;       для нашего примера 3*2 = 6;
  • 4 разряд умножить на 4;       для нашего примера 4*4 = 16;
  • 5 разряд умножить на 10;     для нашего примера 5*10 = 50;
  • 6 разряд умножить на 3;       для нашего примера 6*3 = 18;
  • 7 разряд умножить на 5;       для нашего примера 7*5 = 35;
  • 8 разряд умножить на 9;       для нашего примера 8*9 = 72;
  • 9 разряд умножить на 4;       для нашего примера 9*4 = 36;
  • 10 разряд умножить на 6;     для нашего примера 0*6 = 0;
  • 11 разряд умножить на 8;     для нашего примера 1*8 = 8;
    (хоть это и контрольный разряд, но он учитывается для получения второго контрольного числа)
  • 12 разряд контрольный, его ни на что умножать не надо.

2-2) Просуммируем получившиеся числа. Для нашего примера получиться: 3+14+6+16+50+18+35+72+36+0+8=258

2-3) Следующий шаг: получаем остаток от деления на число 11. Для нашего примера это 258/11 остаток 5

2-3а) Если остаток от деления равен 10, то считать что остаток от деления равен 0.

2-4) Если полученный остаток равен 12-той цифре, и на предыдущем этапе было равенство контрольного числа то ИНН корректен. В нашем примере: полученный остаток 5 не равен 12-той цифре 2, значит такого ИНН быть не может, просим проверить правильность ввода.


Добавить отзыв на страницу "DimaRF.ru >> Проверка ИНН".
Показать 3 отзывов по странице "DimaRF.ru >> Проверка ИНН".