[PHP] Walidacja danych, część 3

Data dodania wpisu: 28-05-2010

Dawno nic nie pisałem. Zwłaszcza na temat walidacji, hehe:P
No dobra,jedziemy z częścią trzecią. W tym odcinku zwalidujemy numerek REGON;)
Teraz żadna pseudofirma nie oszuka nas podając fałszywkę w swoich danych, huehue;)
 
Jak juz wiadomo z poprzedniej części na temat walidacji danych, każdy ciąg znaków, który można w jakikolwiek sposób sprawdzić, posiada (przynajmniej powinien posiadać:P) pewną sumę kontrolną. Nie inaczej jest w przypadku numeru REGON.
 
Kawałki kodu, które zamieszczę poniżej nie będą szczegółowo omówione, gdyż zasada działania jest bardzo zbliżona do walidacji w poprzedniej części. Jedyna różnica dotyczy liczby znaków, numerze cyfry kontrolnej oraz dzielniku sumy kontrolnej w ciągu znaków do walidacji (numeru REGON).
 
Niektórych pewnie zaskoczy fakt, że: REGON może być 9- lub 14-znakowy. Sam byłem zaskoczony i o ile dobrze pamiętam, to 9-znakowy stosuje się globalnie dla firmy, a 14-znakowy jest stosowany dla firm, które mają oddziały w wielu województwach - przy czym wartością zmienną jest pierwsze/ostatnie (naprawdę nie pamiętam, dość dawno szukałem info na ten temat:) ) 5 cyfr.
Poczytali? No to Jurij, dawaj walidatora:P
        function validateREGON($value){
            if(strlen($value) == 9){
                $weights = array(8, 9, 2, 3, 4, 5, 6, 7);
//wagi stosowane dla REGONów 9-znakowych
            }elseif(strlen($value) == 14){
                $weights = array(2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8);
//wagi stosowane dla REGONów 14-znakowych
            }else{
                return false;
            }
            $sum = 0;
            for($i = 0;$i < count($weights); $i++){
                $sum += $weights[$i] * $value[$i];
            }
            $int = $sum % 11;
//dzielnikiem dla sumy kontrolnej jest liczba 11
            $checksum = ($int == 10) ? 0 : $int;
//jeśli liczba kontrolna wynosi 10, to sumą kontrolną jest zero
//w przeciwnym wypadku jest to ta sama liczba
            if($checksum == $value[count($weights)]){
//jezeli suma kontrolna jest rowna przedostatniej cyfrze w numerze REGON
//to numerek jest poprawny
                return true;
            }
            return false;
        }
 

ZOBACZ TEŻ:
Walidacja danych, część 1
Walidacja danych, część 2
Walidacja danych, część 4

Komentarze

Ten wpis nie posiada jeszcze komentarzy

Comments closed...