Szukaj na tym blogu

Postaram się przekazać swoje doświadczenia z PHP, oraz innych dziwnych rzeczach, typu MySQL, DB2. Czyli to co umiem. Blogoczytelników o słabych nerwach proszę o nieczytanie tego blogu. Dlaczego? Jeszcze nie wiem. W razie pytań z dziedziny PHP proszę pytać, jest cień możliwości że akurat to wiem. ;)

wtorek, 3 maja 2011

Sprawdzanie poprawności NIP

Kiedyś w napadzie szału musiałem napisać sprawdzanie NIP. Oczywiście w PHP. Bardzo mnie zdziwiło jak ludzie często pamiętają swój NIP z błędem. Przekonałem się o tym jak wdrożyłem to rozwiązanie na serwer. Oto i one:

<?php
$nip = $_POST['nip']; //albo skadś tam wziąć zmienną
if (strlen($nip) == 10) {
$nip_waga = '657234567';
$nip_suma = 0;
if (ereg ('[0-9]{10,10}', $nip) ){
for ($a = 0; $a <= 8; $a++) {
$nip_suma = $nip_suma + (substr ($nip, $a, 1) * substr ($nip_waga, $a, 1));
}
$nip_suma2 = $nip_suma - (intval($nip_suma/11) *11);
if ($nip_suma2 == substr ($nip, -1, 1)) {
echo "Nip OK";
}
else {
echo 'Nip do bani!';
}
}
else {
echo "Nip ma lipną długość.";
}
?>


Tradycji musi się stać zadość, żeby ten przykład zobaczyć. Jest on tu.
Oczywiście dane są nigdzie zapisywane, więc śmiało.

Oczywiście musi być wersja Java Script. Praca z AJAX'em, czystym... nie wiem czy userzy będą nazywali to relaks, jak komputer będzie pisał z upartością maniaka, że NIP który podają jest dobry, ale nie do końca i żeby wpisali ten poprawny.
Oto wersja JS:

if (nip.length == 10) {
nip_waga = '657234567';
nip_suma = 0;
for (a = 0; a <= 8; a++) {
nip_suma = nip_suma + (nip.substr(a, 1) * nip_waga.substr(a, 1));
}
nip_suma2 = nip_suma - (parseInt(nip_suma/11) *11);
if (nip_suma2 == nip.substr(-1, 1)) {
document.getElementById('wynik').innerHTML = "Nip OK";
}
else {
document.getElementById('wynik').innerHTML = 'Nip do bani!';
}
}
else {
document.getElementById('wynik').innerHTML = 'Nip ma lipną długość.';
}


Wersja do klikania jest tu.
W NIP ostatnia cyfra jest sumą kontrolną. Wystarczy 9 odpowiednio pomnożyć, modulo i porównać z ostatnią dziesiątą. Od tej pory źle wpisujący NIP będą karceni.
Jak mnie nawiedzi, wygrzebię jeszcze do sprawdzania poprawności numeru konta bankowego. Dla wstępu napiszę że pełny numer konta zaczyna się on dwóch znaków kraju. W Polsce od PL. Da się to zrobić, kwestia samozaparcia. ;)