Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Algorithmen (https://www.delphipraxis.net/28-library-algorithmen/)
-   -   Delphi ISBN und EAN Prüfziffernberechnung (https://www.delphipraxis.net/53930-isbn-und-ean-pruefziffernberechnung.html)

Neotracer64 25. Sep 2005 18:04


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)      //
//////////////////////////////////////////////////////////////////////

shmia 26. Sep 2005 16:31

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;

Neotracer64 26. Sep 2005 19:05

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.

himitsu 27. Sep 2005 09:22

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