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] ='0' then
Result := StrHasPrefix(Copy(x, 2, 10), vorwahl_DE)
else
Result := False;
end;
end;