Baza kontrahentów i walidacja NIP
Zadanie 155: Baza kontrahentów i walidacja NIP
Wstęp
W systemach ERP i CRM zarządzanie bazą kontrahentów to jedna z podstawowych funkcji. Kluczowym elementem podczas rejestracji nowej firmy jest weryfikacja jej numeru identyfikacji podatkowej (NIP). Poprawny NIP w Polsce składa się z 10 cyfr, z których ostatnia jest sumą kontrolną wyliczaną według specyficznego algorytmu.
Cel zadania
Stworzysz prosty system dodawania kontrahentów do bazy danych. Twoim głównym zadaniem będzie zaimplementowanie algorytmu weryfikującego sumę kontrolną NIP w PHP, zanim dane zostaną wysłane do bazy MySQL.
Jak działa suma kontrolna NIP?
Aby sprawdzić, czy numer NIP jest poprawny, wykonujemy następujące kroki:
- Mnożymy pierwsze 9 cyfr przez odpowiednie wagi:
6, 5, 7, 2, 3, 4, 5, 6, 7. - Sumujemy wyniki mnożenia.
- Wyliczamy resztę z dzielenia sumy przez 11 (operacja
modulo). - Wynik (reszta) musi być równy ostatniej, dziesiątej cyfrze numeru NIP.
Przykład algorytmu w PHP:
function checkNIP($nip) {
// Usunięcie ewentualnych kresek
$nip = str_replace('-', '', $nip);
// Sprawdzenie długości (musi być 10 cyfr)
if (strlen($nip) != 10 || !is_numeric($nip)) return false;
$weights = [6, 5, 7, 2, 3, 4, 5, 6, 7];
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += $weights[$i] * $nip[$i];
}
$controlSum = $sum % 11;
// Jeśli reszta to 10, NIP jest niepoprawny (ale w praktyce takie NIPy nie są nadawane)
if ($controlSum == 10) return false;
return ($controlSum == $nip[9]);
}
Kroki do wykonania
1. Przygotowanie bazy danych
Utwórz tabelę kontrahenci, która będzie przechowywać dane firmy:
CREATE DATABASE firma_kontrahenci;
USE firma_kontrahenci;
CREATE TABLE kontrahenci (
id INT AUTO_INCREMENT PRIMARY KEY,
nazwa_firmy VARCHAR(255) NOT NULL,
nip VARCHAR(10) UNIQUE NOT NULL,
adres TEXT,
data_dodania TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. Formularz oraz logika PHP
Zaimplementuj formularz HTML oraz skrypt PHP. Pamiętaj o:
- Odbiorze danych metodą
POST. - Wywołaniu funkcji
checkNIP(). - Jeśli NIP jest poprawny -> zapisz do bazy.
- Jeśli NIP jest błędny -> wyświetl komunikat: "Podany numer NIP jest nieprawidłowy!".
Zadania do samodzielnego wykonania
Oto 10 zadań rozszerzających Twój system:
- Formatowanie NIP: Spraw, aby funkcja walidująca akceptowała NIP-y wpisywane z myślnikami (np.
123-456-78-19), ale do bazy zapisuj tylko same cyfry. - Blokada duplikatów: Przed dodaniem kontrahenta sprawdź w bazie, czy firma o takim numerze NIP już istnieje. Jeśli tak – nie dodawaj jej ponownie.
- Pola wymagane: Dodaj walidację
empty()dla polanazwa_firmy. Firma musi mieć nazwę, aby trafić do bazy. - Wielkość liter: Upewnij się, że nazwa firmy jest zapisywana do bazy z wielkiej litery (użyj
ucfirst()lubmb_convert_case()). - Długość adresu: Dodaj warunek, że adres firmy musi mieć minimum 10 znaków.
- Wyświetlanie listy: Pod formularzem stwórz tabelę HTML wyświetlającą wszystkich aktualnie dodanych kontrahentów z bazy.
- Usuwanie kontrahenta: Dodaj w tabeli listującej przycisk "Usuń" obok każdego kontrahenta, który usuwa go z bazy po ID.
- Statystyka: Wyświetl na górze strony informację: "Liczba zarejestrowanych firm: X".
- Informacja o błędzie: Zrób tak, aby po wpisaniu błędnego NIP-u, wprowadzone dane (nazwa, adres) nie znikały z formularza (wykorzystaj atrybut
valuew polachinput). - Zabezpieczenie SQL: Upewnij się, że używasz
mysqli_real_escape_string()dla wszystkich danych tekstowych przed wysłaniem ich do bazy.
Git Help
git add .
git commit -m "PHP Zadanie 155: Contractor management with NIP validation"