jQuery, validate plugin a weryfikacja numeru NIP i PESEL

Napisałem dwa dodatkowe walidatory do pluginu jquery-plugin-validation, które sprawdzają poprawność numeru NIP oraz PESEL.

Najpierw metoda dodająca walidację numeru NIP:

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");

Wystarczy zrobić capy&paste powyższego kodu, do swojej aplikacji. A teraz PESEL:

jQuery.validator.addMethod("pesel", function(value, element) {
var pesel = value.replace(/[\ \-]/gi, ''); 
if (pesel.length != 11) { return false; } else {
var steps = new Array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3); 
var sum_nb = 0;
for (var x = 0; x < 10; x++) { sum_nb += steps[x] * pesel[x];}
sum_m = 10 - sum_nb % 10;
if (sum_m == 10) { sum_c = 0; } else { sum_c = sum_m;}
if (sum_c != pesel[10]) {	return false;}
}
return true;	
}, "Proszę o podanie prawidłowego numeru PESEL");

Tak się zastanawiam, gdzie do diaska się podział plugin odpowiedzialny za kolorowanie składni? :) (odnalazł już się)

Proszę jednak mieć na uwadze, że żyją w Polsce ludzie posiadający nieprawidłowy, z punktu widzenia algorytmu, numer PESEL. Taki urok naszej administracji :) Dlatego warto błąd weryfikacji tego numeru, stosować do ostrzeżenia użytkownika, ale niekoniecznie do całkowitego zablokowania akcji.

I jeszcze przykład wykorzystania walidatora:

$("#orderform").validate({
    rules: {
       field_nip: {
           nip: {
               depends: "#field_nip:filled"
           },			    
           required: "#field_companyname:filled"
        }
    }
});

Powyższy przykład dokona walidacji formularza #orderform, i sprawdzi numer NIP wg następujących reguł:

1) Pole z numerem NIP (field_nip) musi być wypełnione w przypadku gdy podana zostanie nazwa firmy (field_companyname)

2) Jeżeli zostanie podany numer NIP, to sprawdź jego poprawność