Baza kontrahentów i walidacja NIP

PHP
Priorytet: Normalny Szkic

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:

  1. Mnożymy pierwsze 9 cyfr przez odpowiednie wagi: 6, 5, 7, 2, 3, 4, 5, 6, 7.
  2. Sumujemy wyniki mnożenia.
  3. Wyliczamy resztę z dzielenia sumy przez 11 (operacja modulo).
  4. 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:

  1. Odbiorze danych metodą POST.
  2. Wywołaniu funkcji checkNIP().
  3. Jeśli NIP jest poprawny -> zapisz do bazy.
  4. 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:

  1. 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.
  2. Blokada duplikatów: Przed dodaniem kontrahenta sprawdź w bazie, czy firma o takim numerze NIP już istnieje. Jeśli tak – nie dodawaj jej ponownie.
  3. Pola wymagane: Dodaj walidację empty() dla pola nazwa_firmy. Firma musi mieć nazwę, aby trafić do bazy.
  4. Wielkość liter: Upewnij się, że nazwa firmy jest zapisywana do bazy z wielkiej litery (użyj ucfirst() lub mb_convert_case()).
  5. Długość adresu: Dodaj warunek, że adres firmy musi mieć minimum 10 znaków.
  6. Wyświetlanie listy: Pod formularzem stwórz tabelę HTML wyświetlającą wszystkich aktualnie dodanych kontrahentów z bazy.
  7. Usuwanie kontrahenta: Dodaj w tabeli listującej przycisk "Usuń" obok każdego kontrahenta, który usuwa go z bazy po ID.
  8. Statystyka: Wyświetl na górze strony informację: "Liczba zarejestrowanych firm: X".
  9. 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 value w polach input).
  10. 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"