Sprawdzenie, czy wartość jest numerem ISBN

Założenie: Napiszemy funkcję w PHP, która sprawdzi, czy podany ciąg znaków jest poprawnym numerem ISBN.

Krok po kroku:

  1. Krok 1: Stworzenie funkcji walidującej. Funkcja będzie przyjmować numer ISBN jako argument i zwróci wartość logiczną (true/false) wskazującą na poprawność.
  2. 
    function isValidISBN(string $isbn): bool {
      // Usuwamy spacje i myślniki
      $isbn = str_replace([' ', '-'], '', $isbn);
    
      // Sprawdzenie długości ISBN
      if (strlen($isbn) !== 10 && strlen($isbn) !== 13) {
        return false;
      }
    
      // Walidacja ISBN-10
      if (strlen($isbn) === 10) {
        $sum = 0;
        for ($i = 0; $i < 10; $i++) {
          $sum += $isbn[$i] * (10 - $i);
        }
        return $sum % 11 === 0;
      }
    
      // Walidacja ISBN-13
      if (strlen($isbn) === 13) {
        $sum = 0;
        for ($i = 0; $i < 12; $i++) {
          $sum += ($i % 2 === 0) ? $isbn[$i] : $isbn[$i] * 3;
        }
        return (10 - ($sum % 10)) % 10 === intval($isbn[12]);
      }
    
      return false; // Powinno być nieosiągalne, ale dla bezpieczeństwa
    }
    				
  3. Krok 2: Testowanie funkcji. Sprawdźmy, czy funkcja działa poprawnie dla różnych numerów ISBN.
  4. 
    $isbn10 = "0321765723";
    $isbn13 = "978-0321765727";
    $isbnInvalid = "1234567890123";
    
    echo "ISBN-10 ('" . $isbn10 . "'): " . (isValidISBN($isbn10) ? 'Poprawny' : 'Niepoprawny') . "\n";
    echo "ISBN-13 ('" . $isbn13 . "'): " . (isValidISBN($isbn13) ? 'Poprawny' : 'Niepoprawny') . "\n";
    echo "ISBN-Invalid ('" . $isbnInvalid . "'): " . (isValidISBN($isbnInvalid) ? 'Poprawny' : 'Niepoprawny') . "\n";
    				
  5. Krok 3: Zastosowanie w formularzu. Można włączyć tę funkcję do walidacji danych z formularza.

Pamiętaj, aby odpowiednio obsłużyć ewentualne błędy walidacji w formularzu.

Ten przykład pokazuje podstawy walidacji numerów ISBN w PHP. Zachęcamy do dalszego zgłębiania tematu i eksperymentowania z różnymi metodami walidacji danych.

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *