Пишу, по большей части, про историю, свою жизнь и немного про программирование.

ИНН

Неожиданно обнаружил, что ИНН распадается на несколько цифр. Существуют 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;
}