Thema: Delphi Handynummer erkennen

Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

Handynummer erkennen

  Alt 1. Jun 2010, 17:17
Ich möchte erkennen, ob es sich bei einer Telefonnummer um eine Handynummer (mobile phone number) handelt.
Dazu habe ich mir folgende Code zusammengebaut:
Delphi-Quellcode:
function IsMobilePhoneNumber(x:string):Boolean;
const
   vorwahl_DE: array[0..16] of string =
   (
      // T-Mobile
      '151', '160', '170', '171', '175',
      // vodafone
      '152', '162', '172', '173', '174',
      // E-Plus
      '157', '163', '177', '178',
      // O2
      '159', '176', '179'   );
var
   p1 : Integer;
begin
   x := StrRemoveChars(x, [' ','P','-']); // Störzeichen entfernen
   if x = 'then
   begin
      Result := False;
      Exit;
   end;

   // Nummer mit diesem Aufbau behandeln
   // +xx(0)170yyyyyyy
   if x[1] = '+then
   begin
      // die (0) rausschneiden
      p1 := Pos('(0)', x);
      if (p1 > 1) then
         Delete(x, p1, 3);
   end;

   if x[1] ='0then
      Result := StrHasPrefix(Copy(x, 2, 10), vorwahl_DE)
   else if StrHasPrefix(x, ['+49']) then
   begin
      Result := StrHasPrefix(Copy(x, 4,10), vorwahl_DE);
   end
   else
      Result := False;
end;
Irgendwelche Ideen, was man noch verbessern könnte?
Oder wie man auch Handynummern im europäischen Ausland erkennen kann?


Die Funktionen StrRemoveChars() und StrHasPrefix() stammen aus der JCL.
Ich reiche sie hier mal nach für den Fall, dass jemand den Code ohne JCL testen möchte:
Delphi-Quellcode:
function StrRemoveChars(const S: string; const Chars: TSysCharSet): string;
var
  Source, Dest: PChar;
  Len, Index: Integer;
begin
  Len := Length(S);
  SetLength(Result, Len);
  UniqueString(Result);
  Source := PChar(S);
  Dest := PChar(Result);
  for Index := 0 to Len-1 do
  begin
    if not (Source^ in Chars) then
    begin
      Dest^ := Source^;
      Inc(Dest,SizeOf(Char));
    end;
    Inc(Source,SizeOf(Char));
  end;
  SetLength(Result, (Longint(Dest) - Longint(PChar(Result))) div SizeOf(Char));
end;
function StrPrefixIndex(const S: string; const Prefixes: array of string): Integer;
var
  I: Integer;
  Test: string;
begin
  Result := -1;
  for I := Low(Prefixes) to High(Prefixes) do
  begin
    Test := StrLeft(S, Length(Prefixes[I]));
    if AnsiSameText(Test, Prefixes[I]) then
    begin
      Result := I;
      Break;
    end;
  end;
end;
function StrHasPrefix(const S: string; const Prefixes: array of string): Boolean;
begin
  Result := StrPrefixIndex(S, Prefixes) > -1;
end;
Andreas
  Mit Zitat antworten Zitat