Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Optimierung von, IP-Addresse auf Gültigkeit überprüfen

  Alt 10. Jan 2010, 10:57
Hi Astat, Hi Himitsu,

Leider funktioniert der Code von Himitsu nicht korrekt bei S='0.0.0.0'.

Außerdem hab ich noch ein paar Kleinigkeiten optimiert. Die Abfrage nach in ['0'..'9'] kann man mit einer Lookuptabelle optimieren.

Hier eine minimal gepimpte und korrigierte Version.
Delphi-Quellcode:
Var
  IsDigit : Array [Char] Of Boolean;

Procedure InitIsDigit; // Einmal aufrufen, um Isdigit-Lookup zu initialisieren.
Var
  C : Char;

Begin
  For C:= #0 to #255 do IsDigit[C] := C in ['0'..'9'];
End;

function GepimpteHimitsuVersionVonIsIp(const aIpString: string): Boolean;
var
  pIpString: PChar;
  OctetSum, Octet, OctetLength, OctetCount: Integer;

begin
  Result := False;
  pIpString := PChar(aIpString);
  OctetCount := 0;
  OctetSum := 0;
  while pIpString^ <> #0 do
  begin
    Inc(OctetCount);
    Octet := 0;
    OctetLength := 0;
    while IsDigit[pIpString^] do
    begin
      Octet := Octet * 10 + (Ord(pIpString^) - Ord('0'));
      Inc(OctetLength);
      Inc(pIpString);
    end;
    inc(OctetSum, Octet); // Summe aller Einzelwerte erstellen. Muss zum Schluss > 0 werden
    if (OctetLength = 0) or (Octet > 255) then
      Exit;
    if OctetCount = 4 then
      Break;
    if pIpString^ <> '.then
      Exit;
    Inc(pIpString);
  end;
  Result := (OctetSum > 0) and (OctetCount = 4) and (pIpString^ = #0); // Zusätzliche Prüfung auf OctetSum
end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat