Проверка номера ОКПО
Версия от 12:51, 15 февраля 2017; Misha (обсуждение | вклад) (Новая страница: «<pre> function test_okpo($number) { /* Функция проверки номера ОКПО на PHP Алгоритм взят https://ru.wikipedia.org/w…»)
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; }