Rechnungsprogramm OfficeSI - SE-CS erstellt Software für Handwerker und alle Gewerbetreibende

Adressprüfung

Adressprüfung

Ab R12516 können Adressen vor dem Speichern auf Inhalt geprüft werden.
Gehen Sie dazu in Einstellungen Adressen Teil II und dann auf "Adresse prüfen".
Auf Grund der unzähligen Varianten, muss hier ein Script zum Einsatz kommen.
Es ist relativ leicht ein solches Script zu schreiben, falls Sie überhaupt nicht zurecht kommen, erstellen wir Ihnen den Code, natürlich kostenlos.

Hier kommen die Beispiele:

Script 1:
Prüft, ob die Briefanrede ausgefüllt ist. Sie können die Adresse erst speichern, wenn Sie eine Briefanrede gewählt haben
begin
if  Dlg.Left8='' then
Dlg.ErrorText:='Wählen Sie eine Briefanrede aus!';
Dlg.OnlyWarning:=False;
Result:=Dlg.Result;
end.

Script 2:
Prüft, ob im linken Feld 1, die richtige Anzahl Zeichen steht. Sie können aber trotzdem die Adresse speichern
begin
if Length(Trim(Dlg.Left1)) <> 10 then
  Dlg.ErrorText:='Linkes Feld 1 muss 10 Zeichen beinhalten!';
Dlg.OnlyWarning:=True;
Result:=Dlg.Result;
end.

Script 3:
Ist etwas komplizierter. Prüft auf eine gültige Bankverbindung in den  rechten Feldern 9 und 10
function CharIsInInterval(const c: Char; const i1: Char; const i2: Char): Boolean;
begin
  Result := ((Ord(c) >= Ord(i1)) and (Ord(c) <= Ord(i2)));
end;

function CharIsSEPAWhitelisted(const c: Char): Boolean;
begin
  Result := CharIsInInterval(c, 'A', 'Z') or
    CharIsInInterval(c, 'a', 'z') or
    CharIsInInterval(c, '0', '9') or
    (c = '''') or (c = ':') or (c = '?') or
    (c = ',') or (c = '-') or (c = ' ') or
    (c = '(') or (c = '+') or (c = '.') or
  (c = ';') or   (c = ')') or (c = '/');
end;

function ConvertAlphaToNumber(const s: string): string;
var
  i: Integer;
begin
  Result := '';
  for i := 1 to Length(s) do
  begin
    if CharIsInInterval(s[i], '0', '9') then
      Result := Result + s[i]
    else if CharIsInInterval(s[i], 'A', 'Z') then
      Result := Result + IntToStr(10 + Ord(s[i]) - Ord('A'))
    else
      ;
  end;
end;

function Modulo97(const n: string): Integer;
begin
  if Length(n) > 9 then
    Result := Modulo97(IntToStr(Modulo97(Copy(n, 1, 9))) + Copy(n, 10, Length(n) - 9))
  else
    Result := StrToInt(n) mod 97;
end;

function SEPAModulo97(const str: string): Integer;
var
  n: string;
begin
  n := ConvertAlphaToNumber(str);
  if n = '' then
    Result := 0
  else
    Result := Modulo97(n);
end;

function CheckCleanIBAN(const cleanIBAN: string): Boolean;
begin
  if Length(cleanIBAN) > 34 then
  begin
    Result := false;
    Exit;
  end;

  // correct check digits?
  try
    Result := (SEPAModulo97(Copy(cleanIBAN, 5, Length(cleanIBAN)) + Copy(cleanIBAN, 1, 4)) = 1);
  except
    // invalid characters detected
    Result := false;
  end;
end;

function SEPACleanIBANorBICorCI(s: string): string;
var i: integer;
begin
  Result := '';
  for i := 1 to Length(s) do
    if s[i] <> ' ' then
      Result := Result + s[i];
end;

function SEPACheckIBAN(const iban: string): Boolean;
begin
  Result := CheckCleanIBAN(SEPACleanIBANorBICorCI(iban));
end;

function SEPACheckCleanBIC(const cleanBIC: string): Boolean;
var
  i: Integer;
begin
  // check length
  Result := (Length(cleanBIC) = 8) or (Length(cleanBIC) = 11);

  // check characters
  if Result then
  begin
    for i := 1 to Length(cleanBIC) do
    begin
      if not (cleanBIC[i] in ['0'..'9', 'A'..'Z']) then
      begin
        Result := false;
        Break;
      end;
    end;
  end;
end;

function SEPACheckBIC(const bic: string): Boolean;
begin
  Result := SEPACheckCleanBIC(SEPACleanIBANorBICorCI(bic));
end;

var IBAN, BIC: string;
begin

  IBAN := Dlg.Right9;
  BIC := Dlg.Right10;

  if not SEPACheckIBAN(IBAN) then
    Dlg.ErrorText := 'IBAN ' + IBAN + ' ist falsch';

  if not SEPACheckBIC(BIC) then
    Dlg.ErrorText := 'BIC ' + BIC + ' ist falsch';

//True bedeutet, das nur eine Warnung ausgegeben wird, die Adresse kann trotzdem gespeichert werden
  Dlg.OnlyWarning := True;

  Result := Dlg.Result;
end.












QR Code Link auf diese Seite: Adresspruefung.html