В этом году писал реализацию данной функции для проекта C2C-base. Оказывается, бывает ИНН двух видов — для юридических лиц и физ лиц — 10 или 12 знаков соответственно. Проверка большинства подобных кодов осуществляется по контрольным цифрам, содержащимся в номере.
http://ru.wikipedia.org/wiki/Идентификационный_номер_налогоплательщика — формулы расчета взял с вики.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* проверка ИНН */ // ru.wikipedia.org/wiki/Идентификационный_номер_налогоплательщика function valid_inn($inn, $jurface = 1) { if ($jurface == 1) { //для юр лица код 10 знаков if (preg_match('#([\d]{10})#', $inn, $m)) { $inn = $m[0]; $code10 = (($inn[0] * 2 + $inn[1] * 4 + $inn[2] *10 + $inn[3] * 3 + $inn[4] * 5 + $inn[5] * 9 + $inn[6] * 4 + $inn[7] * 6 + $inn[8] * 8) % 11 ) % 10; if ($code10 == $inn[9]) return $inn; } } else { //для физ.лиц и ИП - 12 знаков if (preg_match('#([\d]{12})#', $inn, $m)) { $inn = $m[0]; $code11 = (($inn[0] * 7 + $inn[1] * 2 + $inn[2] * 4 + $inn[3] *10 + $inn[4] * 3 + $inn[5] * 5 + $inn[6] * 9 + $inn[7] * 4 + $inn[8] * 6 + $inn[9] * 8) % 11 ) % 10; $code12 = (($inn[0] * 3 + $inn[1] * 7 + $inn[2] * 2 + $inn[3] * 4 + $inn[4] *10 + $inn[5] * 3 + $inn[6] * 5 + $inn[7] * 9 + $inn[8] * 4 + $inn[9] * 6 + $inn[10]* 8) % 11 ) % 10; if ($code11 == $inn[10] && $code12 == $inn[11]) return $inn; } } return false; } |
На входе функции два параметра — строка, содержащая код, и признак, какой тип кода должен содержаться (10 или 12 знаковый). Если в строке оказывается найден ИНН с правильной контрольной суммой, то он возвращается как результат работы функции. Иначе функция вернет false.
Пример использования.
1 2 |
echo valid_inn('ИНН 6670008292'); //выведет код - 6670008292 |