AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Handynummer erkennen

Ein Thema von shmia · begonnen am 1. Jun 2010 · letzter Beitrag vom 2. Jun 2010
Antwort Antwort
Seite 1 von 2  1 2      
shmia

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

Handynummer erkennen

  Alt 1. Jun 2010, 18: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
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Handynummer erkennen

  Alt 1. Jun 2010, 19:03
Wunsch:
Erkennung von Schweizer Handynummern: 076 XXX XX XX, 077 XXX XX XX, 078 XXX XX XX, 079 XXX XX XX
Thomas
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#3

Re: Handynummer erkennen

  Alt 1. Jun 2010, 19:06
http://www.gottwals.com/europaeische...vorwahlen.html
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von Muellermilchtrinker
Muellermilchtrinker

Registriert seit: 1. Aug 2009
447 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Handynummer erkennen

  Alt 1. Jun 2010, 19:15
vielleicht Rüchgabe des Anbieters.
Ach und "0176" gehört auch zu FONIC.
Fonic gehört zu o2
Chuck Norris doesn't need backups. He just uploads his files and lets the world mirror them.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

Re: Handynummer erkennen

  Alt 1. Jun 2010, 19:22
Irgendwo hab ich eigentlich 'ne RegExp dafür rumliegen, aber ich fand sie grade nicht so auf die Schnelle. (aber Google hilft bestimmt notfalls aus)

Nja, warum löschst du denn hier fleißig in den Strings rum und läßt es nicht einfach soeine schöne RegExp erledigen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#6

Re: Handynummer erkennen

  Alt 1. Jun 2010, 19:27
Zitat von Muellermilchtrinker:
vielleicht Rüchgabe des Anbieters.
Ach und "0176" gehört auch zu FONIC.
Fonic gehört zu o2
Heutzutage kannst du doch sowieso vergessen, über die Vorwahl auf den Anbieter schließen zu wollen - ich habe meine Nummer mittlerweile zwischen drei Netzanbietern gewechselt... (Vodafone -> T-Mobile -> o2, und die Vorwahl is immernoch die gleiche )
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Handynummer erkennen

  Alt 1. Jun 2010, 19:29
Zitat von Muellermilchtrinker:
vielleicht Rüchgabe des Anbieters. ...
Hmmm...

das ist doch garnicht möglich. Oder?
Du kannst ja nicht wissen wer mein Anbieter ist nur weil ich eine bestimmte Nummer habe.

@shima: In England gibt es diese unter anderem diese Vorwahlen für Mobilephones:

+44 (7824)
+44 (7590)
+44 (7734)
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#8

Re: Handynummer erkennen

  Alt 1. Jun 2010, 19:37
inc(RegExVorschlag) von himitsu.
Ist wahrscheinlich komfortabler und einfach zu warten wenn du einmal das richtig RegEx raus hast.
Und wegen den Vorwahlen: Da kann man echt nicht mehr dran fest machen, welcher Anbieter das ist. Durch Rufnummernmitnahme voellig irrelevant geworden.

Uebrigens kann man bei einigen Laendern (z.B. USA) nicht erkennen, ob es sich um einen Mobilfunk oder Festnetznummer handelt.
Manuel
  Mit Zitat antworten Zitat
shmia

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

Re: Handynummer erkennen

  Alt 1. Jun 2010, 19:41
Regular Expressions wäre natürlich auch eine Möglichkeit...

Naja hier mal die Version, die auch die Schweizer und Österreicher Handyvorwahlen erkennt.
Der Rest wäre dann Fleissarbeit.
Delphi-Quellcode:
function IsMobilePhoneNumber(x:string):Boolean;
const
   vorwahl_DE: array[0..19] 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',
      // Rest (simyo, Group 3G,..)
      '150', '161', '164'
         );
   vorwahl_CH: array[0..3] of string =
   ( '76', '77', '78', '79' );

   vorwahl_AT: array[0..18] of string =
   ( '650','651','652','653','655','657','659','660','661','663',
   '664','665','666','667','668','669', '67','68','69' );

   vorwahl_GB: array[0..2] of string =
   ( '7824', '7590', '7734' );
var
   p1 : Integer;
begin
   x := StrRemoveChars(x, [#10,#13,#9,' ','P','-', ',']); // Störzeichen entfernen
   if x = 'then
   begin
      Result := False;
      Exit;
   end;

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

   // Falls die Nummer diesen Aufbau hat
   // (0170)xxxxxxx
   // dann die Klammern entfernen
   if x[1] = '(then
      x := StrRemoveChars(x, ['(',')']);


   case StrPrefixIndex(x, ['+49', '+41', '+43','+44']) of
      0: // Deutscheland
         Result := StrHasPrefix(Copy(x, 4,10), vorwahl_DE);
      1: // Schweiz
         Result := StrHasPrefix(Copy(x, 4,10), vorwahl_CH);
      2: // Österreich
         Result := StrHasPrefix(Copy(x, 4,10), vorwahl_AT);
      3: // vereinigtes Königreich
         Result := StrHasPrefix(Copy(x, 4,10), vorwahl_GB);
   else
      if x[1] ='0then
         Result := StrHasPrefix(Copy(x, 2, 10), vorwahl_DE)
      else
         Result := False;
   end;
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#10

Re: Handynummer erkennen

  Alt 1. Jun 2010, 20:49
Da fehlen noch ein paar deutsche Handyvorwahlen, siehe hier.Hier noch ein Link für die Fleißarbeit mit allen Handyvorwahlen national und international.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:38 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