[PHP] Walidacja danych, część 4

Data dodania wpisu: 28-05-2010

Część 4 nt. walidacji danych obejmie walidację numeru PESEL.
 
Walidacja numeru PESEL opisana w tym wpisie obejmuje również numery PESEL dzieci urodzonych po roku 2000 - mowa tutaj o trzeciej cyfrze, która różnicuje numery PESEL dla ludzi urodzonych np. w roku 1910 oraz 2010 - jak wiadomo, te roczniki posiadają te same dwie pierwsze cyfry w numerze PESEL, dlatego też potrzeba było dodatkowego markera informującego o stuleciu, w którym urodziła się osoba.
 
Poniższa tablica zawiera liczby dodawane do numeru miesiąca w numerze PESEL dla kolejnych stuleci w których osoba została urodzona:

1800-1899 - 80
2000-2099 - 20
2100-2199 - 40
2200-2299 - 60
 
Jeżeli czytaliście poprzednie części walidacji, to wiecie, że pewna cyfra z walidowanego numeru, musi być sumą kontrolną. W przypadku numeru PESEL, liczbą tą jest cyfra ostatnia.
function validatePESEL($value) {
        if (!preg_match('/^[0-9]{11}$/',$value)) {
// sprawdzamy, czy dane wejściowe są jedenastoznakową liczbą
            return false;
        }
        $weights = array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3);
// tutaj mamy kolejne wagi pierwszych dziesięciu cyfr
        $sum = 0;
        for ($i = 0; $i < 10; $i++) {
            $sum += $weights[$i] * $value[$i];
// jak w poprzednich wpisach, wyliczamy sumę kontrolną w taki sam sposób - przemnażając kolejne cyfry numeru przez odpowiadające im wagi
        }
        $int = 10 - $sum % 10;
        $checksum = ($int == 10) ? 0 : $int;
// jeśli różnica z dzielenia sumy kontrolnej jest równa liczbie '10', za wartość uznajemy zero (0)
        if ($checksum == $value[10]) {
            return true;
// no i jak to na końcu walidacji przystało, sprawdzamy czy sumy kontrolne (obliczona i zawarta w numerze PESEL) zgadzają się :)
        }
        return false;
    }
Przykład:
 
Dla numeru: 44051401458
 
mamy:
 
(4*1) + (4*3) + (0*7) + (5*9) + (1*1) + (4*3) + (0*7) + (1*9) + (4*1) + (5*3) + 8 =
 
4 + 12 + 0 + 45 + 1 + 12 + 0 + 9 + 4 + 15 + 8 =
 
110 % 10 = 0
 
0 != 8, czyli podany numer PESEL nie jest prawidłowy.

 

 

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

Komentarze

Napisałem jakiś czas temu funkcję która dodatkowo wyciąga informacje z numeru pesel (data, płeć)
http://www.piszek.com/2013/01/javascript-pesel/
Hej,
mam walidację NIPu do jquery w takiej formie...

jQuery.validator.addMethod("nip", function(value, element) {
var verificator_nip = new Array(6,5,7,2,3,4,5,6,7); var nip = value.replace(/[ -]/gi, '');
if (nip.length != 10) { return false; }
else {
var n = 0;
for (var i=0; i<9; i++) { n += nip[i] * verificator_nip[i]; }
n %= 11;
if (n != nip[9]) { return false; }
}
return true;
}, "Proszę o podanie prawidłowego numeru NIP");

Jak go dyskretnie przerobić żeby walidował poprawność nipu ale tylko wtedy gdy zostanie wpisana jakaś wartość do pola input. Jeżeli pole jest puste formularz może przejść.
Comments closed...

DesignEnd na Facebook'u

Inspiration