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:
