Rubrik: Variablen/Strings · Algorithmen/Mathematik | VB-Versionen: VB2005, VB2008 | 10.09.09 |
ISBN-Nummer auf Gültigkeit prüfen II Eine Funktion zum Prüfen einer beliebigen ISBN-Nummer auf ihre Gültigkeit, wobei sowohl das ISBN-10 als auch das ISBN-13 Verfahren berücksichtigt wird. | ||
Autor: Dieter Otter | Bewertung: | Views: 11.513 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Vor kurzem haben wir Ihnen gezeigt, wie man eine ISBN-Nummer auf Gültigkeit prüfen kann:
ISBN-Nummer auf Gültigkeit prüfen
Das vorgestellte Prüfverfahren berücksichtigte allerdings "nur" das ISBN-10 Verfahren. Die im Jahre 2007 neu eingeführte ISBN-13 konnte mit dem Tipp nicht geprüft werden.
Nachfolgend daher nun die erweiterte Prüfroutine, bei der jetzt auch ISBN-13 Nummern geprüft werden können.
''' <summary> ''' Prüft eine ISBN-Nummer auf ihre Gültigkeit. ''' </summary> ''' <param name="sISBN">ISBN-Nummer</param> ''' <returns>True, wenn gültig. Andernfalls False.</returns> Public Function CheckISBN(ByVal sISBN As String) As Boolean ' Bindestriche und Leerzeichen entfernen sISBN = sISBN.Replace("-", "").Replace(" ", "") If sISBN.Length > 1 Then ' Prüfziffer: letzte Stelle Dim Pruefziffer As Integer If sISBN.Substring(sISBN.Length - 1, 1).ToUpper = "X" Then ' Sonderfall: X = 10 Pruefziffer = 10 Else Pruefziffer = Val(sISBN.Chars(sISBN.Length - 1)) End If If sISBN.Length = 13 Then ' ISBN-13 Dim Summe1 As Integer = 0 Dim Summe2 As Integer = 0 ' Summe der Ziffern 1,3,5,7,9,11 bilden ' Summe der Ziffern 2,4,6,8,10,12 bilden For i As Integer = 0 To sISBN.Length - 2 If i Mod 2 = 0 Then Summe1 += Val(sISBN.Chars(i)) Else Summe2 += Val(sISBN.Chars(i)) End If Next ' Letzte Stelle der Aufsummerung von 10 abziehen ' Als Ergebnis erhalten wir die korrekt berechnete Prüfziffer If CInt((10 - ((Summe1 + 3 * Summe2) Mod 10)) Mod 10) = Pruefziffer Then Return True End If Else ' ISBN-10 ' Summe bilden (bis auf letze Stelle) Dim Summe As Integer = 0 For i As Integer = 0 To sISBN.Length - 2 Summe += Val(sISBN.Chars(i)) * (i + 1) Next ' Errechnte Summe MOD 11 muss gleich der Prüfziffer sein If Summe Mod 11 = Pruefziffer Then Return True End If End If Return False End Function