PHP :: Aufgabe #50

3 Lösungen Lösungen öffentlich

ISBN-Nummern überprüfen

Anfänger - PHP von bibir - 03.09.2014 um 09:10 Uhr
Eine ISBN-Nummer setzt sich immer aus vier Teilen zusammen, der Gruppenzahl, Verlagsnummer, Titelnummer und einer Prüfziffer. Diese vier Teile werden durch Bindestriche (oder seltener Leerzeichen) abgetrennt. Eine ISBN-Nummer ist stets zehnstellig.

Die Prüfziffer erlaubt, die Gültigkeit einer ISBN-Nummer festzustellen. Sie wird so gewählt, dass die ganze Nummer folgende mathematische Eigenschaft erfüllt:
Man multipliziere die erste Stelle mit 10, die zweite Stelle mit 9, die dritte mit 8, und so weiter bis zur neunten Stelle (mal 2), und addiere alle erhaltenen Produkte. Wenn man zu dieser Zahl die Prüfziffer dazuaddiert, so muss ein Vielfaches von 11 entstehen. Als Besonderheit kann die Prüfziffer auch den Buchstaben X annehmen, der dann als Zahlenwert 10 interpretiert wird.

Beispiel:
Die ISBN-Nummer lautet 3-8931-9301-4, also rechnen wir
3 * 10 + 8 * 9 + 9 * 8 + 3 * 7 + 1 * 6 + 9 * 5 + 3 * 4 + 0 * 3 + 1 * 2 + Prüfziffer 4 = 264.
Diese Zahl ist 24 * 11, also ist es eine gültige ISBN-Nummer.

Lösungen:

vote_ok
von Jinnai (340 Punkte) - 22.11.2015 um 01:52 Uhr
Quellcode ausblenden PHP-Code
<?php
	function pruefen($isbn) {
		$summe = 0;
		$werte = str_split($isbn);
		$laenge = strlen($isbn);
		for($i = 0; $i < $laenge; $i++) {
			if($i < 10 && is_numeric($werte[$i]) ) {
				$summe += $werte[$i] * ($laenge - $i);
			}elseif ($werte[$i] == 'x' || $werte[$i] == 'X') {
				$summe += 10;
			}elseif($i == 10) {
				$summe += $werte[$i];
			}
			else {
				echo 'Es wurde keine Gültige ISBN Nummer eingegeben.';
				return 0;
			}
		}
		
		if($summe % 11 == 0) {
			echo 'Es wurde eine Gültige ISBN Nummer eingegeben.';
		}else {
			echo 'Es wurde keine Gültige ISBN Nummer eingegeben.';
		}
	}

	if(isset($_POST['submit'])) {
		if($_POST['isbn'] != '') {
			$isbn = str_replace('-', '', $_POST['isbn']);
			$isbn = str_replace(' ', '', $isbn);
				if(strlen($isbn) == 10) {
					pruefen($isbn);
				}else {
					echo 'Bitte geben Sie eine gültige ISBN Nummer ein.';
				}
		}else {
			echo 'Bitte geben Sie eine ISBN Nummer ein.';
		}
	}
?>


Quellcode ausblenden HTML-Code
<html>
	<form action="" method="POST">
		ISBN-Nummer: <input type="text" name="isbn"><br />
		<input type="submit" name="submit" value="Prüfen">
	</form>
</html>
vote_ok
von paddlboot (3970 Punkte) - 12.08.2019 um 08:36 Uhr
Quellcode ausblenden PHP-Code
<?php
//beliebige ISBN-Nummer angeben
$isbn = '3-8931-9301-4';

$isbn = str_replace('-', '', $isbn);


if(strlen($isbn) != 10)
{
	echo 'ungültige ISBN-Nummer!';
}
else
{
	$stelle = 0;
	$erg = 0;

	if($isbn[9] == 'X' || $isbn[9] == 'x')
	{
		$isbn[9] = 10;
	}


	for($i = 10; $i > 0; $i--)
	{
		$erg += $i * $isbn[$stelle];
		$stelle++;
	}

	if($erg % 11 == 0)
	{
		echo 'Gültige ISBN-Nummer';
	}
	else
	{
		echo 'ungültige ISBN-Nummer';
	}
}
?>
vote_ok
von pornstarIRL (410 Punkte) - 18.11.2019 um 14:38 Uhr
Quellcode ausblenden PHP-Code
function isbnNumber($number){
  $char = "-";
  $newChar = "";
  $newString = str_split(str_replace($char, $newChar, $number));

  $newString[0] = $newString[0] * 10;
  $newString[1] = $newString[1] * 9;
  $newString[2] = $newString[2] * 8;
  $newString[3] = $newString[3] * 7;
  $newString[4] = $newString[4] * 6;
  $newString[5] = $newString[5] * 5;
  $newString[6] = $newString[6] * 4;
  $newString[7] = $newString[7] * 3;
  $newString[8] = $newString[8] * 2;
  $newString[9] = $newString[9] * 1;
  
  $final = $newString[0] + $newString[1] + $newString[2] + $newString[3] + $newString[4] + $newString[5] + $newString[6] + $newString[7] + $newString[8] + $newString[9];

  if ($final % 11 == 0){
    echo "$number is a valid ISBN-Number";
  }else{
    echo "$number is not a valid ISBN-Number";
  }
}


Konsolenausgabe:

3981540808 is a valid ISBN-Number