ISBN und EAN Prüfziffernberechnung
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
//////////////////////////////////////////////////////////////////////
// Unit ISBNLib (c)'05 Philipp K. // //==================================================================// // Funktionen: // // - isValidISBN10 (Prüft die Gültigkeit einer ISB10-Nummer) // // - CompleteISBN10 (Ergänzt die Prüfziffer einer unvollst. ISBN10) // // // // - isValidEAN (Prüft die Gültigkeit einer EA-Nummer) // // - CompleteEAN (Ergänzt die Prüfziffer einer unvollst. EAN) // ////////////////////////////////////////////////////////////////////// |
Re: ISBN und EAN Prüfziffernberechnung
Prüfziffern werden häufig aus einer gewichteten Summe errechnet.
Es bietet sich an, dies durch eine Funktion errechnen zu lassen:
Delphi-Quellcode:
{**************************************************************************
* NAME: PZ_SummenBildung * DESC: * Berechnung einer gewichteten Summe * es gibt je einem Gewichtungsfaktor für gerade und ungerade Ziffern * RESULT: die gewichtete Summe *************************************************************************} function PZ_SummenBildung(const s:string; ungerade,gerade:integer):Integer; var sum_a, sum_b : integer; IsOdd : boolean; n : integer; ziffer : integer; begin sum_a := 0; sum_b := 0; IsOdd := Odd(Length(s)); for n:=1 to Length(s) do begin ziffer := Ord(s[n])-Ord('0'); if IsOdd then sum_a := sum_a + ziffer else sum_b := sum_b + ziffer; IsOdd := not IsOdd; end; result := sum_a * ungerade + sum_b * gerade; end; |
Re: ISBN und EAN Prüfziffernberechnung
Ja Bei der EAN-Prüfzifferberechung könnte ich das einbauen. Da wird ja immer abwechselnd mit 1 und mit 3 multipliziert.
Bei der ISBN10-Prüfzifferberechung sieht es da schon anders aus. |
Re: ISBN und EAN Prüfziffernberechnung
Wenn's denn sein muß ... 'nen einfachen ISBN(10)-Check hab'sch och noch bei mir rumliegen ._.
Delphi-Quellcode:
Function IsValidISBN(S: AnsiString): ByteBool;
Var M, C, i: Integer; Begin Result := False; If _Length(S) < 10 then Exit; M := 10; C := 0; For i := _Length(S) downto 1 do If (M = 10) and (S[i] in ['x', 'X']) Then Begin Inc(C, 100); Dec(M); End Else If S[i] in ['0'..'9'] Then Begin If M = 0 Then Exit; Inc(C, M * (Ord(S[i]) - Ord('0'))); Dec(M); End Else If not (S[i] in [' ', '-']) Then Exit; If M > 0 then Exit; Result := C mod 11 = 0; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz