Ruby :: Aufgabe #50 :: Lösung #1

1 Lösung Lösung öffentlich
#50

ISBN-Nummern überprüfen

Anfänger - Ruby 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.
#1
vote_ok
von Idef1x (1320 Punkte) - 18.05.2018 um 16:11 Uhr
Quellcode ausblenden Ruby-Code
=begin
 T.y.P. #50 ISBN number test
 By Lars I.
=end

def isbn_test(isbn)
=begin
 IN:
  -ISBN-Number
  
 OUT:
  -Bool (valid/invalid)
=end

#Section - CODE

 #Section - Declaration
    
    isbnnr = []
    sum = 0
    
 #Section - Erasing the spaces and -
 
    isbn.each_char do |char|
        
        if char == char.to_i.to_s then
            
            char = char.to_i
            
            if (0..9).include?(char) then
            
                isbnnr.push(char)
                
            end
            
        end
        
    end
 
 #Section - Test length
    print isbnnr
    
    if isbnnr.length != 10 then
        
        puts "The entered ISBN is invalid because it is not 10 digits long"
        
        return
        
    end
    
 #Section - Validating the ISBN
    isbn_rev = isbnnr.reverse
    
    (10..1).each do |factor|
        
        sum += isbnnr[factor-1] * factor
        
    end
    
    if sum % 11 == 0 then
        
        puts "The entered ISBN is valid"
        
    else
        
        puts "The entered ISBN is invalid because the checksum is not dividable by 11"
        
    end
 
end

isbn = gets.chomp

isbn_test(isbn)

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben