|
Registriert seit: 13. Jan 2004 Ort: Hamm(Westf) 2.044 Beiträge Delphi 12 Athens |
#29
Diese Version sollte ne menge beachten,
allerdings macht sie das hier falsch Amt 0 Ort 030 Land 0049 Exitcode 00 0049171123456 und 171123456 stimmen überein Ich denke es währe das beste wann immer ein Amt eingestellt ist zu fordern das in den Stammdaten kein Amt Angegeben ist. Dann kann mann direkt zu beginn auf Amt Prüfen und dieses eliminieren...ich glaube das hattest du auch vorgeschlagen mit "Wegwerfen"?
Delphi-Quellcode:
unit Teltools;
interface uses classes; Function EqualPhoneNumber(KnownNumber, UnknownNumber, InternExitCode, AreaCode, CountryCode, NationalExitCode : String; NonAreaPrefixCountryCodes:TStrings = Nil) : Boolean; implementation uses strutils,sysutils,math; // Diese Funktion Vergleicht 2 Telefonnummern, KnownNumber und UnknownNumber, // und erkennt die Nummer auch wenn Amt(InternExitcode), // Ortsvorwahl/Handynetzvorwahl(Areacode) oder Landesvorwahl(CountryCode) // des Standorts fehlen. // // Die abweichenden NationalExitCodes sind für: // Standard "00" // USA und Canada "011" // Kuba "119" // Suedafrika "09" // Nur als Beispiel: Von Amerika nach Deutschland telefoniert man mit der Vorwahl // "01149" statt wie sonst üblich "0049" -> der NationalExitCode ist eben ein anderer // // an NonAreaPrefixCountryCodes kann ein TStrings mit den Ländercodes die Kein Vorwahl System haben übergeben // werden, z.B. "0031" für Italien. Es wird nur der StandardExitCodes "00" in dieser Liste erlaubt. // Wenn NonAreaPrefixCountryCodes nihct angegeben wird so werden die Ortsvorwahlullen immer ignoriert. Function EqualPhoneNumber(KnownNumber, UnknownNumber, InternExitCode, AreaCode, CountryCode, NationalExitCode : String; NonAreaPrefixCountryCodes:TStrings = Nil) : Boolean; Var LastIndex : Integer; RemainingKnownNumber : String; RemainingUnknownNumber : String; MatchingNumber : String; RemainingAreaCode : String; RemainingCountryCode : String; RemainingInternExitCode: String; UnkownNumberCountryCode: String; KownNumberCountryCode : String; // Liefert die erste unterschiedliche Stelle oder 0 wenn // keine Unterschiede bestehen. Function EqualStr(a : String; b : String) : Integer; Var I : Integer; L : Integer; iLenA : Integer; iLenB : Integer; Begin iLenA := Length(a); iLenB := Length(b); L := Min(iLenA,iLenB); For i := 1 to L Do Begin if a[i] <> b[i] then Begin result := i; exit; end; end; if iLenA <> iLenB then begin Result := succ(L); exit; end else begin Result := 0; end; end; Function FilterString(s,AllowedChars:String):String; var i, j : integer; Erlaubt : boolean; Begin Result := s; For i := 1 to length(s) do Begin Erlaubt := false; for j := 1 to Length(AllowedChars) do Begin if (Result[i] = AllowedChars[j]) then Begin Erlaubt := true; Break; end end; if not erlaubt then delete(result,i,1); end; end; Begin Result := false; UnknownNumber := FilterString(StringReplace(UnknownNumber,'+',NationalExitCode,[]),'0123456789') ; KnownNumber := FilterString(StringReplace(KnownNumber,'+',NationalExitCode,[]),'0123456789') ; if (UnknownNumber <> '') and (KnownNumber <> '') then Begin If NonAreaPrefixCountryCodes <> nil then Begin // Landesvorwahl mit Standardexitcode merken UnkownNumberCountryCode := CountryCode; UnkownNumberCountryCode := StringReplace(UnkownNumberCountryCode,NationalExitCode,'00',[]); KownNumberCountryCode := UnkownNumberCountryCode; end; KnownNumber := ReverseString(KnownNumber); UnknownNumber := ReverseString(UnknownNumber); AreaCode := ReverseString(areaCode); CountryCode := ReverseString(CountryCode); InternExitCode := ReverseString(InternExitCode); NationalExitCode := ReverseString(NationalExitCode); // Nummer von Rechts an vergleichen Lastindex := EqualStr(UnknownNumber, KnownNumber); // Die Nummern stimmen nicht überein: // Es gibt einen Unterschied // in InternExitCode // oder CountryCode // oder AreaCode if LastIndex > 0 then Begin // Die Teilstrings holen, ab dem Beginn des Unterschiedes RemainingKnownNumber := copy(KnownNumber, LastIndex, Length(KnownNumber)); RemainingUnknownNumber := copy(UnknownNumber, LastIndex, Length(UnknownNumber)); // Der übereinstimmende Teil der Nummern // im Moment noch zu nichts zu gebrauchen MatchingNumber := copy(KnownNumber, 1, LastIndex - 1); if RemainingKnownNumber <> '' then Begin // Area Code in RemainingKnownNumber entfernen wenn er gleich dem // Standort ist Lastindex := EqualStr(RemainingKnownNumber,AreaCode); If Lastindex > 0 then Begin RemainingAreacode := Copy(Areacode, LastIndex, Length(Areacode)); if (RemainingAreacode = '0') or (RemainingAreacode = '') then RemainingKnownNumber := Copy(RemainingKnownNumber, LastIndex, Length(RemainingKnownNumber)); //Sonst nichts enfernen end else RemainingKnownNumber := ''; end; //if RemainingKnownNumber <> '' then if RemainingKnownNumber <> '' then Begin // Country Code in RemainingKnownNumber entfernen wenn er gleich dem // Standort ist Lastindex := EqualStr(CountryCode,RemainingKnownNumber); If Lastindex > 0 then Begin RemainingCountryCode := Copy(CountryCode, LastIndex, Length(CountryCode)); if (RemainingCountryCode = NationalExitCode) or (RemainingCountryCode = '') then begin RemainingKnownNumber := Copy(RemainingKnownNumber, Lastindex, Length(RemainingKnownNumber)) // Wenn das Programm in den USA laufen würde, müsste jetzt auf einen // abweichenden Exitcode (011 für Nordamerika) geprüft werden end end else Begin if NonAreaPrefixCountryCodes <> nil then Begin KownNumberCountryCode := RemainingKnownNumber; KownNumberCountryCode := StringReplace(KownNumberCountryCode,NationalExitCode,'00',[]); KownNumberCountryCode := ReverseString(KownNumberCountryCode); end; RemainingKnownNumber := ''; end; end; // if RemainingKnownNumber <> '' then If RemainingKnownNumber <> '' then Begin // Amt entfernen falls vorhanden Lastindex := EqualStr(InternExitCode,RemainingKnownNumber); If lastindex > 0 then Begin RemainingInternExitCode := Copy (InternExitCode,Lastindex,length(InternExitCode)); If (RemainingInternExitCode = '') then RemainingknownNumber := copy(RemainingKnownNumber, Lastindex, Length(RemainingKnownNumber)) end else RemainingKnownNumber := ''; end; // If RemainingknownNumber <> '' then If RemainingUnknownNumber <> '' then Begin // Area Code in RemainingUnknownNumber entfernen wenn er gleich dem // Standort ist Lastindex := EqualStr(RemainingUnknownNumber,AreaCode); If Lastindex > 0 then Begin RemainingAreacode := Copy(Areacode, LastIndex, Length(Areacode)); if (RemainingAreacode = '0') or (RemainingAreacode = '') then RemainingUnknownNumber := Copy(RemainingUnknownNumber, LastIndex, Length(RemainingUnknownNumber)); //Sonst nichts enfernen end else RemainingUnknownNumber := ''; end; // If RemainingUnknownNumber <> '' then if RemainingUnknownNumber <> '' then Begin // Country Code in RemainingUnknownNumber entfernen wenn er gleich dem // Standort ist Lastindex := EqualStr(CountryCode,RemainingUnknownNumber); If Lastindex > 0 then Begin RemainingCountryCode := Copy(CountryCode, LastIndex, Length(CountryCode)); if (RemainingCountryCode = NationalExitCode) or (RemainingCountryCode = '') then begin RemainingUnknownNumber := Copy(RemainingUnknownNumber, Lastindex, Length(RemainingUnknownNumber)) // Wenn das Programm in den USA laufen würde müste jetzt auf einen // abweichenden Exitcode(011 für Nordamerika) geprüft werden end end else Begin if NonAreaPrefixCountryCodes <> nil then Begin UnkownNumberCountryCode := RemainingUnknownNumber; UnkownNumberCountryCode := StringReplace(UnkownNumberCountryCode,NationalExitCode,'00',[]); UnkownNumberCountryCode := ReverseString(UnkownNumberCountryCode); end; RemainingUnknownNumber := ''; end end; // if RemainingUnknownNumber <> '' then If RemainingUnknownNumber <> '' then Begin // Amt entfernen falls vorhanden Lastindex := EqualStr(InternExitCode,RemainingUnknownNumber); If lastindex > 0 then Begin RemainingInternExitCode := Copy (InternExitCode,Lastindex,length(InternExitCode)); If (RemainingInternExitCode = '') then RemainingUnknownNumber := copy(RemainingUnknownNumber, Lastindex, Length(RemainingUnknownNumber)) end else RemainingUnknownNumber := ''; end; // If RemainingUnknownNumber <> '' then If (NonAreaPrefixCountryCodes = nil) or ( (NonAreaPrefixCountryCodes <> nil) and (NonAreaPrefixCountryCodes.IndexOF(KownNumberCountryCode) = -1) ) Then Begin If (RemainingKnownNumber = '0') then Begin RemainingKnownNumber := ''; end end; If (NonAreaPrefixCountryCodes = nil) or ( (NonAreaPrefixCountryCodes <> nil) and (NonAreaPrefixCountryCodes.IndexOf(UnkownNumberCountryCode) = -1) ) Then Begin If (RemainingUnKnownNumber = '0') then Begin RemainingUnKnownNumber := ''; end; end; result := (RemainingKnownNumber = '') and (RemainingUnKnownNumber = ''); end // if LastIndex > 0 then else result := true; // Wenn volle Übereinstimmung end; // if (UnknownNumber <> '') and // (KnownNumber <> '') then end; end.
Andreas
Monads? Wtf are Monads? |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |