Also Amt wird in der Regel nicht durch die Telefonanlage weiter gegeben.
Wenn es Ausnahmnsweise doch so ist muss Amt angegeben werden.
Die Handynetzvorwahl oder die Ortsvorwahl werden bei allen von Extern kommenden Gesprächen angezeigt
habe noch mal von neu angefangen und verwende jetzt das hier:
Es funktioniert unter den diskutierten Bedingungen...und es funktioniert nicht in Italien...
ich glaube dem Problem stelle ich mich erst wenn einer unserer Italien Kunden das Telefonmodul einsetzt.
Delphi-Quellcode:
// 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;
Function EqualCaller(NumberOfCaller,
CallingNumber,
InternExitCode,
AreaCode,
CountryCode,
NationalExitcode:String):boolean;
function DetectCode(aNumber,aCode:string): Boolean;
Begin
If (ACode = '') then
Result := False
else
Result := (EqualStr(aNumber,Acode) = succ(length(acode)));
end;
Var InternExitCodeDetected:boolean;
InternalCalling:Boolean;
MobileInternationalCalling:Boolean;
CallerNumberPrefix:Boolean;
Begin
Result := false;
NumberOfCaller := FilterString(StringReplace(NumberOfCaller,'+',NationalExitcode,[]),'1234567890');
CallingNumber := FilterString(StringReplace(CallingNumber,'+',NationalExitcode,[]),'1234567890');
If (NumberOfCaller <> '') and (CallingNumber <> '') then
begin
//Amt elliminieren
InternExitCodeDetected := DetectCode(CallingNumber,InternExitCode);
If InternExitCodeDetected then
delete(CallingNumber,1,length(internExitCode));
//Amt Elliminiert
InternalCalling := (not InternExitCodeDetected) and (InternExitCode<>'');
If not InternalCalling then // Wenn Anruf von extern
begin
// Countrycode + AereaCode ohne Präfix elliminieren
if length(CallingNumber) > Length(CountryCode) then
begin
MobileInternationalCalling := DetectCode(CallingNumber, CountryCode);
if MobileInternationalCalling then
Begin
Delete(CallingNumber,1,length(CountryCode));
CallerNumberPrefix := DetectCode(NumberOfCaller,'0'); //Prefix ermitteln
if CallerNumberPrefix then
Delete(NumberOfCaller,1,1) //Prefix löschen
else
exit;//Result := false; Weil ist InternalCaller aber nicht InternalCalling
end;
end;
// Countrycode + AreaCode ohne Präfix elliminiert!
end;
Result := (NumberOfCaller = CallingNumber);
end;// If (NumberOfCaller <> '') and (CallingNumber <> '') then
end;//Function EqualCaller(NumberOfCaller,....