Sprawdzenie, czy wartość jest poprawnym numerem ISBN (weryfikacja sumy kontrolnej)
Założenie: Napiszemy funkcję PHP, która sprawdzi, czy podany numer ISBN jest poprawny, weryfikując jego sumę kontrolną.
Krok po kroku:
- Przygotowanie funkcji: Zdefiniujemy funkcję
isValidISBN
, która przyjmie numer ISBN jako argument. - Weryfikacja długości i formatu ISBN-10: Sprawdzamy, czy długość ISBN jest równa 10 i czy zawiera tylko cyfry.
- Weryfikacja długości i formatu ISBN-13: Sprawdzamy, czy długość ISBN jest równa 13 i czy zawiera tylko cyfry.
- Użycie funkcji: Wywołujemy funkcję i wyświetlamy wynik.
function isValidISBN($isbn) {
// Usuwamy myślniki i spacje
$isbn = str_replace(array('-', ' '), '', $isbn);
// Sprawdzenie długości ISBN
if (strlen($isbn) != 10 && strlen($isbn) != 13) {
return false;
}
// ... (dalej kod w kolejnych krokach)
}
if (strlen($isbn) == 10) {
if (!ctype_digit($isbn)) return false;
// Algorytm weryfikacji sumy kontrolnej dla ISBN-10
$sum = 0;
for ($i = 0; $i < 9; $i++) {
$sum += ($isbn[$i] * (10 - $i));
}
$checkDigit = 11 - ($sum % 11);
if ($checkDigit == 10) $checkDigit = 'X';
return $checkDigit == $isbn[9];
}
if (strlen($isbn) == 13) {
if (!ctype_digit($isbn)) return false;
// Algorytm weryfikacji sumy kontrolnej dla ISBN-13
$sum = 0;
for ($i = 0; $i < 12; $i++) {
$sum += ($i % 2 == 0) ? $isbn[$i] : $isbn[$i] * 3;
}
$checkDigit = 10 - ($sum % 10);
if ($checkDigit == 10) $checkDigit = 0;
return $checkDigit == $isbn[12];
}
return false; // ISBN nie jest ani 10, ani 13-cyfrowy
}
$isbn10 = "0321765723";
$isbn13 = "978-0321765727";
$isbnInvalid = "1234567890123";
echo "ISBN-10 ('$isbn10'): " . (isValidISBN($isbn10) ? 'Poprawny' : 'Niepoprawny') . "
";
echo "ISBN-13 ('$isbn13'): " . (isValidISBN($isbn13) ? 'Poprawny' : 'Niepoprawny') . "
";
echo "ISBN-Invalid ('$isbnInvalid'): " . (isValidISBN($isbnInvalid) ? 'Poprawny' : 'Niepoprawny') . "
";
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 w formularzach.