AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Handynummer zu ordnen
Thema durchsuchen
Ansicht
Themen-Optionen

Handynummer zu ordnen

Ein Thema von QuickAndDirty · begonnen am 13. Okt 2008 · letzter Beitrag vom 20. Okt 2008
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#31

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 09:48
Ok die Funktion hat jetzt 'nen modischen Filter bekommen und
du hast vergessen den NationalExitCode umzudrehen.

Eine Sache stört mich noch. Denn es kann eine ungünstige Kombination aus Amt und Ortsvorwahl
wie eine Landesvorwahl ohne Amt interpretiert werden.
Amt müsste Priorität haben!

Ach ja, das mit der Vorwahl 0 ist keine allgemeine Regel wie man an den NANPA Codes sieht,
Wenn der nationalexitcode=00 ist, die Regel mit der 0 gelten...denke ich...
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
miwi

Registriert seit: 20. Feb 2008
4 Beiträge
 
#32

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 10:29
Zum Einen würde ich auch den Vergleich "umdrehen" und von hinten nach vorne vergleichen. Alternativ kannst du ja auch erstmal auf das vorhandensein von Ländercodes (00 oder +) testen und die dann eliminieren. Das ganze kannst du dann auch noch relativ leicht testen, indem du irgendeinen Voip-Anschluss hernimmst und den die SenderID's faken läßt.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#33

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 10:47
Zitat von miwi:
Zum Einen würde ich auch den Vergleich "umdrehen" und von hinten nach vorne vergleichen.
Genau das ist implementiert über "ReverseString"
Zitat von miwi:
Alternativ kannst du ja auch erstmal auf das vorhandensein von Ländercodes (00 oder +) testen und die dann eliminieren. Das ganze kannst du dann auch noch relativ leicht testen, indem du irgendeinen Voip-Anschluss hernimmst und den die SenderID's faken läßt.
Das ist doch bereits implementiert.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#34

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 10:58
Zitat von QuickAndDirty:
Eine Sache stört mich noch. Denn es kann eine ungünstige Kombination aus Amt und Ortsvorwahl
wie eine Landesvorwahl ohne Amt interpretiert werden.
Amt müsste Priorität haben!
Wie lang kann Amt sein? Mehr als eine Stelle, wenn nein, ist Amt, wenn der Rest eins lang ist (oh' watt fürn deutsch )
Momentan besteht der Quelltext ja aus mehreren aufeinanderfolgenden If-Blöcken. Wäre es eventuell sinnvoll, jeweils dazwischen den Rest in RemainingKnownNumber bzw. RemainingUnKnownNumber auf Gleichheit mit dem Amt zu prüfen?

Erster Test:

interner ExitCode = 9
AreaCode = 030
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
0211123456 und 0049211123456 unterscheiden sich <-- nicht korrekt
0211123456 und +49211123456 unterscheiden sich <-- nicht korrekt
0049171123456789 und 0171123456789 unterscheiden sich <-- nicht korrekt
030123456 und 004930123456 unterscheiden sich <-- nicht korrekt
030123456 und +4930123456 unterscheiden sich <-- nicht korrekt
+4930123456 und 030123456 unterscheiden sich <-- nicht korrekt
+4930123456 und 004930123456 stimmen überein <-- korrekt
+4930123456 und +4930123456 stimmen überein <-- korrekt
004930123456 und 030123456 unterscheiden sich <-- nicht korrekt
004930123456 und 004930123456 stimmen überein <-- korrekt
004930123456 und +4930123456 stimmen überein <-- korrekt

Die Erkennung beim CountryCode scheint noch zu hapern, wenn er auf einer Seite fehlt.

interner ExitCode = 9
AreaCode = 0211
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
0211123456 und 0049211123456 unterscheiden sich <-- nicht korrekt
0211123456 und +49211123456 unterscheiden sich <-- nicht korrekt
0049171123456789 und 0171123456789 unterscheiden sich <-- nicht korrekt
030123456 und 030123456 stimmen überein <-- korrekt
030123456 und 004930123456 unterscheiden sich <-- nicht korrekt
030123456 und +4930123456 unterscheiden sich <-- nicht korrekt
+4930123456 und 030123456 unterscheiden sich <-- nicht korrekt
+4930123456 und 004930123456 stimmen überein <-- korrekt
+4930123456 und +4930123456 stimmen überein <-- korrekt
004930123456 und 030123456 unterscheiden sich <-- nicht korrekt
004930123456 und 004930123456 stimmen überein <-- korrekt
004930123456 und +4930123456 stimmen überein <-- korrekt

Bei den Handynummern mache ich momentan diese Zeile
Delphi-Quellcode:
if RemainingAreacode = '0then
  RemainingUnknownNumber := Copy(RemainingUnknownNumber, LastIndex, Length(RemainingUnknownNumber));
für das "Nichterkennen" verantwortlich, bin mir aber nicht sicher.

Jetzt kommt nur grobe "Analyse": Die Vorwahl-0 und Amt = 0 können zu einem Konflikt führen, wenn Amt <> 0 tritt der anscheined nicht auf.

Für die Vorwahl-0 wird keine Gleichheit mit dem CountryCode erkannt.

Habe den Quelltext nochmal mit dem Debugger unter die Lupe genommen und bin zu den folgenden mit // --> S.B. und // <-- S.B. markierten Änderungen gekommen. Leider ist der CountryCode 9400 zweimal im Quelltext fest verdrahtet, da ich keine allgemeinere Lösung gefunden habe.
Delphi-Quellcode:
unit Teltools;

interface

Function EqualPhoneNumber(KnownNumber : String;
                          UnknownNumber : String;
                          InternExitCode : String;
                          AreaCode : String;
                          CountryCode : String;
                          NationalExitCode : String) : 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.
//
// Momentane Schwächen:
// Die Funktion versteht nur den Standard NationalExitCode "00"
// Die abweichenden NationalExitCodes sind für:
// USA und Canada "011"
// Kuba "119"
// Suedafrika "09"
// diese Exitcodes sind noch nicht implementiert
// Nur als Beispiel: Von Amerika nach Deutschland telefoniert man mit der Vorwahl
// "01149" statt wie sonst üblich "0049" -> der NationalExitCode ist eben ein anderer
Function EqualPhoneNumber(KnownNumber : String;
                          UnknownNumber : String;
                          InternExitCode : String;
                          AreaCode : String;
                          CountryCode : String;
                          NationalExitCode : String) : Boolean;
Var
         LastIndex : Integer;
         RemainingKnownNumber : String;
         RemainingUnknownNumber : String;
         MatchingNumber : String;
         RemainingAreaCode : String;
         RemainingCountryCode : 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;
// --> S.B.
  // UnknownNumber := FilterString(StringReplace(UnknownNumber,'+','00',[]),'0123456789') ;
  UnknownNumber := FilterString(StringReplace(UnknownNumber,'+',NationalExitCode,[]),'0123456789') ;
  // KnownNumber := FilterString(StringReplace(KnownNumber,'+','00',[]),'0123456789') ;
  KnownNumber := FilterString(StringReplace(KnownNumber,'+',NationalExitCode ,[]),'0123456789') ;
// <-- S.B.
  if (UnknownNumber <> '') and (KnownNumber <> '') then
  Begin
    KnownNumber := ReverseString(KnownNumber);
    UnknownNumber := ReverseString(UnknownNumber);
    AreaCode := ReverseString(areaCode);
    CountryCode := ReverseString(CountryCode);
    InternExitCode := ReverseString(InternExitCode);
    NationalExitCode := ReverseString(NationalExitCode); // <- Das hier nicht vergessen

    // 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 = '0then // Ist das eine allgemeine Regel?
                                          // In Italien ist die 0 Teil der Nummer,
                                          // dort sollte der AreaCode dann besser leer sein.
                                          // A.R. Genau. Italien kennt keine Areacodes.
            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) 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
          RemainingKnownNumber := '';
      end; // if RemainingKnownNumber <> '' then

      If RemainingKnownNumber <> 'then
      Begin
         // Amt entfernen falls vorhanden
         If RemainingKnownNumber = InternExitCode then
           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 = '0then
            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 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
          RemainingUnknownNumber := '';
      end; // if RemainingUnknownNumber <> '' then

      If RemainingUnknownNumber <> 'then
      Begin
         // Amt entfernen falls vorhanden
         If RemainingUnknownNumber = InternExitCode then
           RemainingUnknownNumber := ''
      end; // If RemainingUnknownNumber <> '' then

// --> S.B.
      // Bis hierher wird keine Gleichheit für Vorwahl-0 und CountryCode erkannt.
      If (RemainingKnownNumber = '0') // Diese Einschränkung, da nur für Deutschland gültig?
      And (CountryCode = '9400') then // Ist das verallgemeinerbar?
      // Oder könnte man hergehen und eine verbleibende 0 mit einem Leerstring gleichsetzen?
      Begin
        RemainingKnownNumber := '';
      end;
// <-- S.B.

// --> S.B.
      // Bis hierher wird keine Gleichheit für Vorwahl-0 und CountryCode erkannt.
      If (RemainingUnKnownNumber = '0') // Diese Einschränkung, da nur für Deutschland gültig?
      And (CountryCode = '9400') then // Ist das verallgemeinerbar?
      // Oder könnte man hergehen und eine verbleibende 0 mit einem Leerstring gleichsetzen?
      Begin
        RemainingUnKnownNumber := '';
      end;
// <-- S.B.

// --> S.B.
      // Das dürfte zu grob sein!!! A.R. kann sein mal testen S.B. der Kommentar bezog sich auf die vorherige Variante des Rückgabewertes, kann daher entfallen.
// <-- S.B.
      result := (RemainingKnownNumber = '') and (RemainingUnKnownNumber = '');
    end // if LastIndex > 0 then
    else
      result := true; // Wenn volle Übereinstimmung
  end; // if (UnknownNumber <> '') and
       // (KnownNumber <> '') then
end;

end.

(*
// --> S.B. Das funktioniert so (noch) nicht
      // Alternativ zu den am Ende eingefügten Blöcken mit der festen 9400
      If (RemainingKnownNumber = '0') // Diese Einschränkung, da nur für Deutschland gültig?
      And (RemainingUnKnownNumber = CountryCode) then  // Ist das verallgemeinerbar?
      Begin
        RemainingKnownNumber := '';
        RemainingUnKnownNumber := '';
      end;

      If (RemainingUnKnownNumber = '0') // Diese Einschränkung, da nur für Deutschland gültig?
      And (RemainingKnownNumber = CountryCode) then  // Ist das verallgemeinerbar?
      Begin
        RemainingKnownNumber := '';
        RemainingUnKnownNumber := '';
      end;
// <-- S.B.
*)
Zwei Tests erbrachten folgende Ergebnisse:
interner ExitCode = 9
AreaCode = 030
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
123456 und 123456 stimmen überein
123456 und 0211123456 unterscheiden sich
9123456 und 123456 stimmen überein
123456 und 0049123456 stimmen überein
123456 und +49123456 stimmen überein
123456 und 0049211123456 unterscheiden sich
123456 und +49211123456 unterscheiden sich
0211123456 und 0049211123456 stimmen überein
0211123456 und +49211123456 stimmen überein
0049171123456789 und 0171123456789 stimmen überein
123456 und 030123456 stimmen überein
123456 und 004930123456 stimmen überein
123456 und +4930123456 stimmen überein
030123456 und 030123456 stimmen überein
030123456 und 004930123456 stimmen überein
030123456 und +4930123456 stimmen überein
+4930123456 und 030123456 stimmen überein
+4930123456 und 004930123456 stimmen überein
+4930123456 und +4930123456 stimmen überein
004930123456 und 030123456 stimmen überein
004930123456 und 004930123456 stimmen überein
004930123456 und +4930123456 stimmen überein

interner ExitCode = 9
AreaCode = 0211
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
123456 und 123456 stimmen überein
123456 und 0211123456 stimmen überein
9123456 und 123456 stimmen überein
123456 und 0049123456 stimmen überein
123456 und +49123456 stimmen überein
123456 und 0049211123456 stimmen überein
123456 und +49211123456 stimmen überein
0211123456 und 0049211123456 stimmen überein
0211123456 und +49211123456 stimmen überein
0049171123456789 und 0171123456789 stimmen überein
123456 und 030123456 unterscheiden sich
123456 und 004930123456 unterscheiden sich
123456 und +4930123456 unterscheiden sich
030123456 und 030123456 stimmen überein
030123456 und 004930123456 stimmen überein
030123456 und +4930123456 stimmen überein
+4930123456 und 030123456 stimmen überein
+4930123456 und 004930123456 stimmen überein
+4930123456 und +4930123456 stimmen überein
004930123456 und 030123456 stimmen überein
004930123456 und 004930123456 stimmen überein
004930123456 und +4930123456 stimmen überein

Die Ergebnisse sollten meiner Meinung nach stimmen.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#35

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 12:56
Ich würde auch alle führenden Nullen der RemainingNumber Strings vor dem finalen Vergleich löschen.
Das klappt in Europa auf jeden Fall.
Aber warum sollten solche Nullen übrig bleiben?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#36

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 13:27
Hallo,

hab' nochmal mit dem Amt rumgespielt, egal ob es jetzt nun einstellig oder mehrstellig ist, habe den Eindruck, dass es bei der Fassung aus meinem vorigen Post, immer korrekt funktioniert, auch dann noch, wenn ich die beiden
And (CountryCode = '9400') entferne und bei RemainingKnownNumber bzw. RemainingUnKnownNumber = 0 diese auf Leerstring setzte. Dies dürfte zur Folge haben, dass keine führenden Nullen überbleiben und die festverdrahtete Abhängigkeit für 0049 im Quelltext entfallen kann.
Die grundsätzliche Entfernung der führenden Nullen dürfte sicherlich den Vergleich vereinfachen, hat aber wohl auch Nachteile: 0 für Amt würde entfallen, 9 für Amt aber nicht, was wird bei 01 für Amt?
In Italien würde die 0 als Teil der Telefonnummer entfallen, was für Rom sicherlich zu einer ungültigen Telefonnummer führt.

Naja, da fällt mir noch war auf:

interner ExitCode = 1
AreaCode = 0211
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
1123456 und 01123456 stimmen überein <-- falsch

interner ExitCode = 01
AreaCode = 0211
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
1123456 und 01123456 stimmen überein <-- richtig

Hier habe ich momentan keine Idee, wie man diese Problem lösen kann.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#37

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 13:45
Also Führende nullen zu löschen ist nicht schlimm wenn zuvor Amt korrekt abgehandelt wurde.
Allerdings würde das in Italien wirklich zu gleichen Telefonnummern führen obwohl sie nicht gleich sind.
Delphi-Quellcode:
unit Teltools;

interface


Function EqualPhoneNumber(KnownNumber : String;
                          UnknownNumber : String;
                          InternExitCode : String;
                          AreaCode : String;
                          CountryCode : String;
                          NationalExitCode : String) : 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
Function EqualPhoneNumber(KnownNumber : String;
                          UnknownNumber : String;
                          InternExitCode : String;
                          AreaCode : String;
                          CountryCode : String;
                          NationalExitCode : String) : Boolean;
Var
         LastIndex : Integer;
         RemainingKnownNumber : String;
         RemainingUnknownNumber : String;
         MatchingNumber : String;
         RemainingAreaCode : String;
         RemainingCountryCode : String;
         RemainingInternExitCode: 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
    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
          RemainingKnownNumber := '';
      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
          RemainingUnknownNumber := '';
      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

{A.R. Testweise Auskommentiert
// --> S.B.
      // Bis hierher wird keine Gleichheit für Vorwahl-0 und CountryCode erkannt.
      If (RemainingKnownNumber = '0') // Diese Einschränkung, da nur für Deutschland gültig?
      And (CountryCode = '9400') then // Ist das verallgemeinerbar?
      // Oder könnte man hergehen und eine verbleibende 0 mit einem Leerstring gleichsetzen?
      Begin
        RemainingKnownNumber := '';
      end;
// <-- S.B.

// --> S.B.
      // Bis hierher wird keine Gleichheit für Vorwahl-0 und CountryCode erkannt.
      If (RemainingUnKnownNumber = '0') // Diese Einschränkung, da nur für Deutschland gültig?
      And (CountryCode = '9400') then  // Ist das verallgemeinerbar?
      // Oder könnte man hergehen und eine verbleibende 0 mit einem Leerstring gleichsetzen?
      Begin
        RemainingUnKnownNumber := '';
      end;
// <-- S.B.
}

      result := (RemainingKnownNumber = '') and (RemainingUnKnownNumber = '');
    end // if LastIndex > 0 then
    else
      result := true; // Wenn volle Übereinstimmung
  end; // if (UnknownNumber <> '') and
       // (KnownNumber <> '') then
end;

end.
Hier habe ich mal die Amts Prüfung eingesetzt.
Wenn ich deinen Code auskommentiere erkennt er es für Italien auch, aber eben dann nicht mehr für normale Ferngespräche

Beispiel:
Amt 0
Stadt 030
Land 0049
Nationalexitcode 00

00049171123456 und 00171123456 sind unterschiedlich
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#38

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 14:26
Hallo,

mal wieder ein Test:

interner ExitCode = 01
AreaCode = 0211
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
0211123456 und 0049211123456 unterscheiden sich
0211123456 und +49211123456 unterscheiden sich
0049171123456789 und 0171123456789 unterscheiden sich
030123456 und 004930123456 unterscheiden sich
030123456 und +4930123456 unterscheiden sich
+4930123456 und 030123456 unterscheiden sich
004930123456 und 030123456 unterscheiden sich
004930123456 und +4930123456 stimmen überein

interner ExitCode = 01
AreaCode = 030
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
0211123456 und 0049211123456 unterscheiden sich
0211123456 und +49211123456 unterscheiden sich
0049171123456789 und 0171123456789 unterscheiden sich
030123456 und 004930123456 unterscheiden sich
030123456 und +4930123456 unterscheiden sich
+4930123456 und 030123456 unterscheiden sich
004930123456 und 030123456 unterscheiden sich

Habe nur das übergelassen, was meiner Meinung nach falsch ist.

Mit diesen Werten sind die Ergebnisse richtig:

interner ExitCode = 0
AreaCode = 0211
CountryCode = 0049
Nationaler ExitCode = 00

interner ExitCode = 0
AreaCode = 030
CountryCode = 0049
Nationaler ExitCode = 00

Auf die Schnelle sieht es so aus, als würden die Ergebnisse stimmen, sofern Amt nur einstellig ist.

Dashier verblüfft mich:
interner ExitCode = 0
AreaCode = 030
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
00171123456 und 00049171123456 unterscheiden sich
0171123456 und 00049171123456 stimmen überein
00049171123456 und 00171123456 unterscheiden sich

interner ExitCode = 9
AreaCode = 030
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
90171123456 und 90049171123456 unterscheiden sich
0171123456 und 90049171123456 unterscheiden sich
90049171123456 und 90171123456 unterscheiden sich

Oder hapert es bei der Amtserkennung doch noch deutlich?

Hab's mal wieder mit dem Debugger versucht: für dieses Beispiel RemainingKnownNumber = 90049171123456 und RemainingUnKnownNumber = 90171123456 bleibt bei der RemainingUnKnownNumber die 09 bis zum Ende über. Es wird korrekt 654321171 auf beiden Seiten abgetrennt, dann wird bei RemainingKnownNumber die 9400 abgetrennt und anschließend die 9.
Bei der RemainingUnKnownNumber müsste vor der Prüfung auf Amt die 0 entfernt werden.

Hilft es eventuell die Amtskennung zuerst "rauszuwerfen"? Habe da momentan aber keine konkrete Idee, wo und wie das ohne Nebenwirkungen ginge.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#39

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 14:58
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?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#40

Re: Handynummer zu ordnen

  Alt 15. Okt 2008, 15:32
Hallo,

wieder mal Testergebnisse:

interner ExitCode = 9
AreaCode = 030
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
0123456 und 123456 stimmen überein
1123456 und 01123456 stimmen überein
123456 und 09123456 stimmen überein
09123456 und 123456 stimmen überein
90171123456 und 90049171123456 unterscheiden sich
0171123456 und 90049171123456 stimmen überein
90049171123456 und 90171123456 unterscheiden sich

interner ExitCode = 9
AreaCode = 0211
CountryCode = 0049
Nationaler ExitCode = 00

bekannt und unbekannt
0123456 und 123456 stimmen überein
0123456 und 0211123456 stimmen überein
0211123456 und 0123456 stimmen überein
0049211123456 und 0123456 stimmen überein
0049171123456789 und 0171123456789 stimmen überein
1123456 und 01123456 stimmen überein
123456 und 09123456 stimmen überein
09123456 und 123456 stimmen überein
90171123456 und 90049171123456 unterscheiden sich
0171123456 und 90049171123456 stimmen überein
90049171123456 und 90171123456 unterscheiden sich

Habe wieder nur die übergelassen, die meiner Meinung nach nicht korrekt sind.

bei
interner ExitCode = 0
AreaCode = 0211
CountryCode = 0049
Nationaler ExitCode = 00
stimmen die Ergebnisse

Hierzu habe ich eine Frage:
Delphi-Quellcode:
if NonAreaPrefixCountryCodes <> nil then
Begin
  KownNumberCountryCode := RemainingKnownNumber;
  KownNumberCountryCode := StringReplace(KownNumberCountryCode,NationalExitCode,'00',[]);
  KownNumberCountryCode := ReverseString(KownNumberCountryCode); <-- muss das nicht entfallen?
end;
RemainingKnownNumber ist doch schon "rückwärts", wird KownNumberCountryCode dadurch dann nicht "vorwärts"?

Zitat:
0049171123456 und 171123456 stimmen überein
Bei dem Beispiel kann ich der Routine nicht verübeln, dass sie Nummern die für gleich hält, wir wissen zwar, dass in Germany 171 eigentlich 0171 heißen müsste, aber warum soll es keine Telefonnummer 171-irgendwas geben, das dürfte ohne Ausnahmetabellen nicht handhabbar sein.

Zitat:
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"?
Ja, der Vorschlag ist sinnvoll, der Anwender darf bei der Pflege der Daten durchaus auch ein bisserl "Gehirnschmalz" einsetzen. Das Amt mit in die Stammdaten zu pflegen, halte ich eigentlich für absurd. Stell Dir ein Unternehmen mit zig Filialen vor, jede eine eigene Telefonzentrale und jede Telefonzentrale mit einer eigenen Amtsvorwahl. Das wäre doch Horror und für unternehmensweiten Einsatz der Daten einfach nur ungeeignet.

Trotzdem befürchte ich, dass Du für das Amt nicht um eine "Doppeltbehandlung" herum kommst:

Ohne Amt: 0049030123456 mit Amt: 90049030123456
Ohne Amt: 030123456 mit Amt: 9030123456
Ohne Amt: 123456 mit Amt: 9123456
Aber: Woher die Gewissheit, dass hier 9 = Amt?
Könnte es nicht auch sein:
Ohne Amt: 9123456 mit Amt: 99123456?
Du hast ja letztlich keine Möglichkeit zu erkennen, ob die Nummer mit oder ohne Amt kommt.

[OT]So, dass muss für heute reichen, hier bei uns wird gleich die Stromversorgung repariert und ich muss jetzt unseren "Rechnerpark" runterfahren und nachher schauen, dass die Server wieder vernünftig arbeiten.[/OT]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 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