ИНН
Неожиданно обнаружил, что ИНН распадается на несколько цифр. Существуют 10- и 12-ти значные ИНН в форме NNNNXXXXXC и NNNNXXXXXXCC.
Где
NNNN — номер налоговой инспекции.
XXXXX или XXXXXX — номер налогоплательщика.
C или CC — контрольные числа.
Я нашёл алгоритм расчёта контрольных чисел и переписал его на PHP. Если кому-нибудь надо (например, для проверки на валидность введённого ИНН), могу поделиться:
function CheckNN ($inn)
{
$factor = array (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8);
if (strlen($inn) == 10)
{
for ($i = $sum = 0; $i<9; $i++)
$sum += $inn{$i}*$factor[$i+2];
return ($sum%11)%10;
}
if (strlen($inn) == 12)
{
for ($i = $sum = 0; $i<10; $i++)
$sum += $inn{$i}*$factor[$i+1];
for ($i = $sum2 = 0; $i<11; $i++)
$sum2 += $inn{$i}*$factor[$i];
return (($sum%11)%10) . (($sum2%11)%10);
}
return FALSE;
}