function test_okpo($number)
{
/* Функция проверки номера ОКПО на PHP
Алгоритм взят https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE#.D0.9D.D0.BE.D0.BC.D0.B5.D1.80_.D0.9E.D0.9A.D0.9F.D0.9E
*/
// Дб все цифры - без пробелов
// Если все ок возвращает 1;
$error='';
$sum=0;
$weight=array();
$lents = strlen($number);
if($lents == 0)
{
$error .='Вы не ввели номер ОКПО';
}else
{
if(preg_match("/^(\d+)$/", $number)==false)
{
$error .='В номере ОКПО должны быть только цифры';
}
else
{
if ($lents == 9) {$number = '0'.$number; $lents=10;}
if($lents == 10 || $lents==8)
{
$digits = preg_split('//', $number, -1, PREG_SPLIT_NO_EMPTY);
$ost = balance($digits,1);
if($ost == 10)
{
$ost = balance($digits,3);
if($ost == 10) $ost = 0;
}
if($ost == $digits[$lents-1]) $error = 1;
else $error .='Номер ОКПО введен не правильно';
}
elseif($lents > 10 || $lents < 8)
{
$error .='Количество цифр номера ОКПО должно быть от 8 до 10';
}
}
}
return $error;
}
function balance($digits, $shift)
{
$lents = count($digits);
for($i=0; $i < $lents-1; $i++)
{
$weight[$i]=$i+$shift;
$sum += $digits[$i] * $weight[$i];
}
$ost = $sum % 11;
return $ost;
}