deutschsprachige FoxPro User Group
Forum View
Home
  
  IBAN prüfen- #24264 in section [743425]
Sec: (1) Allgemeines
Von: Harro Schippan
An: Christian Isberner
Am/Um: 28.01.2022 10:40:54 gelesen


 


 

Hallo Christian,
es hat mir keine Ruhe gelassen.
Habe die Prüfziffer jetzt mit einer kleinen Routine selbst errechnet.

Sind ja nur wenige Zeilen.

Danke für Deine Antwort.

Viele Grüße
Harro





Das hört sich gut an! Ich hatte die CMath Klasse geerbt, es gab aber einige Probleme damit, z.B. konnte sie nicht mit Dezimalkomma arbeiten, oder mit negativen Werten rechnen. Es war ziemlich schwierig das alles anzupassen (deshalb hatte die ursprüngliche Klasse wohl auch diese Probleme), wenn Du das also ohne diesem Overhead machen kannst ist es natürlich besser.



Hallo Christian,
hab das jetzt so gemacht:
Die IBAN-Nr ist natürlich nicht korrekt.

Gruß Harro

*********************************************************************************
* Überprüfung der Prüfziffer in einer IBAN-Nr
*********************************************************************************
CLEAR 
? REPLICATE("*",80)
lcIBAN = "DE52 3006 0110 0029 2428 67"
? "IBAN:", lcIBAN at 15
*********************************************************************************
* Felder aufbereiten
lcIBANn = CHRTRAN(lcIBAN," ","")        && entferne Leerstellen
lcLand  = substr (lcIBANn ,1,2)            && Land separieren
lcLandN = TRANSFORM(ASC(SUBSTR(lcLand,1,1)) - 55) + TRANSFORM(ASC(SUBSTR(lcLand,2,1)) - 55) && Buchstaben im Land ersetzen
lcPZ    = SUBSTR (lcIBANn, 3,2)            && Prüfziffer extrahieren
lcRest  = SUBSTR (lcIBANn,5)            && IBAN Ohne Land Und PZ
*********************************************************************************
* Zu prüfender String
lcIBAN   = lcRest+lcLandN+"00"            && IBAN-Prüfstring
lnLenGrZ = LEN(lcIBAN)                    && Länge IBAN
? "IBAN:", lcIBAN   at 15
lnDivisor   = 97
lnKonstante = 98
******************************************************************
* Schleife über alle Stellen
lcDividend  = SUBSTR(lcIBAN,1,1)
FOR lni = 1 TO lnLenGrZ 
    lnDividend    = VAL(lcDividend)
    lnErgGanzZahl = INT(lnDividend/lnDivisor)
    lnErgRest     = INT(lnDividend - (lnErgGanzZahl * lnDivisor))
    IF lnErgGanzZahl > 0
        lcDividend  = STR(lnErgRest)
    ENDIF 
    lcDividend    = lcDividend + SUBSTR(lcIBAN,lni+1,1)
ENDFOR 
******************************************************************
? REPLICATE("*",80)
? "Prüfziffer aus Eingabe:", lcPZ   at 25
? "Prüfziffer errechnet:", ALLTRIM(TRANSFORM(98 - lnErgRest ))  at 25
? REPLICATE("*",80)
IF lnKonstante - lnErgRest = VAL(lcPZ)
    ? "Die Prüfziffer ist korrekt"
ELSE 
    ? "Die Prüfziffer ist falsch"
ENDIF 
? REPLICATE("*",80)
******************************************************************
******************************************************************




Harro Schippan   20.01.2022 09:16
Christian Isberner  26.01.2022 10:06
Harro Schippan  27.01.2022 13:26
Harro Schippan  27.01.2022 16:29
Christian Isberner  28.01.2022 08:02
Harro Schippan  28.01.2022 10:40
Harro Schippan  28.01.2022 13:26
S.Schabbach  07.02.2022 13:32
Harro Schippan  08.02.2022 07:10
  
zurück zum Forum