<?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. ;)