Deutsch
Quelltexte/ Codesnippets

Ermitteln Iban Prüfen - 2

 

ByteAttack
wer es benötigt...
CLS
/*
Informationen von IBAN.DE und SPARKONTO.ORG
Mit Hilfe von David Strutz und optimiert von Jörg Sellmeyer
Das international einheitliche Generierungs- und Validierungsverfahren der IBAN-Prüfziffer wurde vom
ECBS (European Committee for Banking Standards) festgelegt.
Die Berechnung beziehungsweise die Generierung der Prüfziffer erfolgt gemäß ISO 7064 per Modulo 97-10.
Die stets zweistellige Prüfziffer befindet sich bei jeder IBAN, unabhängig von der Gesamtlänge der
internationalen Kontonummer, an der gleichen Position. Dabei handelt es sich um die dritte und die
vierte Stelle gleich hinter der zweistelligen, alphanumerischen Länderkennung, mit der jede IBAN beginnt.
Die Prüfziffer wird rein numerisch dargestellt.
Vor der Erstellung der persönlichen internationalen Bankkontonummer für jeden Kontoinhaber wird von der
Bank die Prüfziffer elektronisch berechnet. Dazu werden in Deutschland die achtstellige Bankleitzahl,
die zehnstellige Kontonummer und die zweistellige, alphanumerische Länderkennung benötigt.
Kontonummern mit weniger als zehn Stellen werden mit führenden Nullen aufgefüllt.
Die Berechnung erfolgt in mehreren Schritten. Zuerst wird die Länderkennung um zwei Nullen ergänzt.
Danach wird aus Kontonummer und Bankleitzahl die BBAN kreiert.
Also beispielsweise Bankleitzahl 70090100 und Kontonummer 1234567890 ergeben die BBAN 700901001234567890.
*/
var Blz$="70090100"
var Kto$="1234567890"
var Land$="DE"

WhileNot len(Kto$)=10

    Kto$="0"+Kto$

EndWhile

var BBAN$=Blz$+Kto$
/*
Anschließend werden die beiden Alpha-Zeichen der Länderkennung sowie weitere eventuell in der Kontonummer
enthaltene Buchstaben in rein numerische Ausdrücke umgewandelt. Die Grundlage für die Zahlen, die aus den
Buchstaben gebildet werden sollen, bildet ihre Position der jeweiligen Alpha-Zeichen im lateinischen Alphabet.
Zu diesem Zahlenwert wird 9 addiert. Die Summe ergibt die Zahl, die den jeweiligen Buchstaben ersetzen soll.
Dementsprechend steht für A (Position 1+9) die Zahl 10, für D (Position 4+9) die 13 und für E (Position 5+9) die 14.
Der Länderkennung DE entspricht also die Ziffernfolge 1314.
*/

Proc LandCode

    Parameters LK$
    Declare ZF$

    Proc LKZ

        Parameters BS$
        Declare LKZahl&
        LKZahl& = Ord(BS$) - 55
        Return LKZahl&

    EndProc

    LKZ Left$(LK$,1)
    ZF$=Str$(&(0))
    LKZ Right$(LK$,1)
    ZF$=ZF$+Str$(&(0))
    Return ZF$

EndProc

LandCode Upper$(Land$)
var LZF$=$(0)
'Im nächsten Schritt wird diese Ziffernfolge, ergänzt um die beiden Nullen, an die BBAN gehängt.
'Hieraus ergibt sich 700901001234567890131400.
BBAN$=BBAN$+LZF$+"00"
var TBBAN$=BBAN$
/*
Diese bei deutschen Konten immer 24-stellige Zahl wird anschließend Modulo 97 genommen. Das heißt,
es wird der Rest berechnet, der sich bei der Teilung der 24-stelligen Zahl durch 97 ergibt.
--> BBAN Modulo 97 zu groß. Deshalb zerteilen und Blockweise (in 9er Blöcke) berechnen.
*/

Proc Diff

    Parameters Block&
    Declare Block2&,Block3&
    Block2&=Block&/97
    Block3&=Block2&*97
    Return Block&-Block3&

EndProc

Diff val(left$(TBBAN$,9))
TBBAN$=Del$(TBBAN$,1,9)
var Diff$=Str$(&(0))
Case len(Diff$)<2:Diff$="0"+Diff$
Declare Dazu$

WhileNot len(TBBAN$)<=0

    Dazu$=Diff$+TBBAN$
    Diff val(left$(Dazu$,9))
    Diff$=Str$(&(0))
    Case len(Diff$)<2:Diff$="0"+Diff$
    TBBAN$=Del$(TBBAN$,1,7)

EndWhile

/*
Dieses Ergebnis wird von der nach ISO-Standard festgelegten Zahl 98 subtrahiert.
Ist das Resultat, wie in diesem Beispiel, kleiner als Zehn, so wird der Zahl eine Null vorangestellt,
sodass sich wieder ein zweistelliger Wert ergibt. Somit ist die errechnete Prüfziffer 08. Aus der Länderkennung,
der zweistelligen Prüfsumme und der BBAN wird nun die IBAN generiert.
Die ermittelte IBAN lautet in unserem Beispiel: DE08700901001234567890.
*/
Case len(Diff$)<2:Diff$="0"+Diff$
var PZ$=Str$(98-val(Diff$))
Case len(PZ$)<2:PZ$="0"+PZ$
var IBAN$=Upper$(Land$)+PZ$+Blz$+Kto$
/*
Die Prüfung der IBAN erfolgt, indem ihre ersten vier Stellen ans Ende verschoben und die Buchstaben wieder durch 1314
ersetzt werden. Die Zahl 700901001234567890131408 Modulo 97 muss 1 ergeben.
Dann ist die IBAN gültig, was auf unser Beispiel zutrifft.
*/
BBAN$=left$(BBAN$,(len(BBAN$)-2))+PZ$
TBBAN$=BBAN$
Diff val(left$(TBBAN$,9))
TBBAN$=Del$(TBBAN$,1,9)
Diff$=Str$(&(0))
Case len(Diff$)<2:Diff$="0"+Diff$

WhileNot len(TBBAN$)<=0

    Dazu$=Diff$+TBBAN$
    Diff val(left$(Dazu$,9))
    Diff$=Str$(&(0))
    Case len(Diff$)<2:Diff$="0"+Diff$
    TBBAN$=Del$(TBBAN$,1,7)

EndWhile

Case len(Diff$)>=1:Diff$=Right$(Diff$,1)
var Validate&=val(Diff$)
' AUSGABE
print "Kontonummer: "+Kto$
print "Bankleitzahl: "+Blz$
print "IBAN: "+IBAN$

ifNot Validate&=1

    Print "IBAN ungültig"

else

    Print "IBAN gültig"

endif

Waitinput

Michael W. (31.12.2015)
Ich hab mir das auch verwurstet...

Declare String Nation[], Integer NationIdx,i
Declare String NatKenn, BLZ_Max, Kto_Max, Land, Maske, NatBlock, BLZ, Kto
' NatKenn | BLZ | Kto | Land | Maske
' BLZ: 11, Kto: 22
i = 0 : Nation[i] = "BE|03|09|Belgien|Msk ,"' IBAN BExx xxxx xxxx xxxx
inc i : Nation[i] = "BG|08|10|Bulgarien|Msk ,"' IBAN BGxx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "DE|08|10|Deutschland|Msk ,"' IBAN DExx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "DK|04|10|Dänemark|Msk ,"' IBAN DKxx xxxx xxxx xxxx xx
inc i : Nation[i] = "EE|04|12|Estland|Msk ,"' IBAN EExx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "FI|06|08|Finnland|Msk ,"' IBAN FIxx xxxx xxxx xxxx xx
inc i : Nation[i] = "FR|10|13|Frankreich|Msk ,"' IBAN FRxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "GF|10|13|Französisch-Guiana|Msk ,"' IBAN GFxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "PF|10|13|Französisch-Polynesien|Msk ,"' IBAN PFxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "GI|04|15|Gibraltar|Msk ,"' IBAN GIxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "GR|07|16|Griechenland|Msk ,"' IBAN GRxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "GB|10|08|Großbritannien|Msk ,"' IBAN GBxx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "GP|10|13|Guadeloupe|Msk ,"' IBAN GPxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "IE|10|08|Irland|Msk ,"' IBAN IExx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "IS|04|18|Island (EWR- nicht EU-Mitglied)|Msk ,"' IBAN ISxx xxxx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "IT|11|12|Italien (1bu+10blz)|Msk 1;10,12"' 1-stellige Prüfziffer (Buchstabe) + 10-stelliger Bankcode ' IBAN ITxx Xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "HR|07|10|Kroatien|Msk ,"' IBAN HRxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "LV|04|13|Lettland|Msk ,"' IBAN LVxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "LI|05|12|Liechtenstein (EWR- nicht EU-Mitglied)|Msk ,"' IBAN LIxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "LT|05|11|Litauen|Msk ,"' IBAN LTxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "LU|03|13|Luxemburg|Msk ,"' IBAN LUxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "MT|09|18|Malta|Msk ,"' IBAN MTxx xxxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "MQ|03|13|Martinique|Msk ,"' IBAN MQxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "YT|10|13|Mayotte|Msk ,"' IBAN YTxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "MC|10|13|Monaco (kein EU/EWR-Staat)|Msk ,"' IBAN MCxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "NC|10|13|Neukaledonien|Msk ,"' IBAN NCxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "NL|04|10|Niederlande|Msk ,"' IBAN NLxx xxxx xxxx xxxx xx
inc i : Nation[i] = "NO|04|07|Norwegen (EWR- nicht EU-Mitglied)|Msk ,"' IBAN NOxx xxxx xxxx xxx
inc i : Nation[i] = "AT|05|11|Österreich|Msk ,"' IBAN ATxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "PL|08|16|Polen|Msk ,"' IBAN PLxx xxxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "PT|08|13|Portugal einschl. Azoren und Madeira|Msk ,"' IBAN PTxx xxxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "RE|10|13|Réunion|Msk ,"' IBAN RExx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "RO|04|16|Rumänien|Msk ,"' IBAN ROxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "PM|10|13|Saint Pierre und Miquelon|Msk ,"' IBAN PMxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "SM|11|12|San Marino (kein EU/EWR-Staat) (1bu+10blz)|Msk 1;10,12"' 1-stellige Prüfziffer (Buchstabe) + 10-stelliger Bankcode ' IBAN SMxx Xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "CH|05|12|Schweiz (kein EU/EWR-Staat)|Msk ,"' IBAN CHxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "SE|03|17|Schweden|Msk ,"' IBAN SExx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "SK|04|16|Slowakei|Msk ,"' IBAN SKxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "SI|05|10|Slowenien|Msk ,"' IBAN SIxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "ES|08|12|Spanien einschl. Kanarische Inseln|Msk ,"' IBAN ESxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "CZ|04|16|Tschechische Republik|Msk ,"' IBAN CZxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "HU|07|17|Ungarn|Msk ,"' IBAN HUxx xxxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "CY|08|16|Zypern|Msk ,"' IBAN CYxx xxxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "AL|08|16|Albanien|Msk ,"' IBAN
inc i : Nation[i] = "AD|08|12|Andorra|Msk ,"' IBAN
inc i : Nation[i] = "AZ|04|20|Aserbaidschan|Msk ,"' IBAN
inc i : Nation[i] = "BH|04|14|Bahrain|Msk ,"' IBAN
inc i : Nation[i] = "BA|06|10|Bosnien-Herzegowina|Msk 6,8;2"' IBAN
inc i : Nation[i] = "CR|03|14|Costa Rica|Msk ,"' IBAN
inc i : Nation[i] = "DO|04|20|Dominikanische Republik|Msk ,"' IBAN
inc i : Nation[i] = "GE|02|16|Georgien|Msk ,"' IBAN
inc i : Nation[i] = "IL|06|13|Israel|Msk ,"' IBAN
inc i : Nation[i] = "JE_GB|10|08|Jersey (IBAN Großbritannien)|Msk ,"' IBAN GBxx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "JE_FR|10|13|Jersey (IBAN Frankreich)|Msk ,"' IBAN FRxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "JO|08|18|Jordanien|Msk 4;4,18"' IBAN
inc i : Nation[i] = "KZ|03|13|Kasachstan|Msk ,"' IBAN
inc i : Nation[i] = "KW|04|22|Kuwait|Msk ,"' IBAN
inc i : Nation[i] = "LB|04|20|Libanon|Msk ,"' IBAN
inc i : Nation[i] = "MR|10|13|Mauretanien|Msk 10,11;2"' IBAN MRxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "MU|08|18|Mauritius|Msk 4;2;2,12;3;3"' IBAN
inc i : Nation[i] = "MK|03|12|Mazedonien|Msk 3,10;2"' IBAN
inc i : Nation[i] = "MD|02|18|Moldawien|Msk ,"' IBAN
inc i : Nation[i] = "ME|02|15|Montenegro|Msk 2,13;2"' IBAN
inc i : Nation[i] = "PK|04|16|Pakistan|Msk ,"' IBAN
inc i : Nation[i] = "PS|04|21|Palästina|Msk ,"' IBAN
inc i : Nation[i] = "QA|04|21|Qatar|Msk ,"' IBAN
inc i : Nation[i] = "SA|02|18|Saudi Arabien|Msk ,"' IBAN
inc i : Nation[i] = "RS|02|15|Serbien|Msk 2,13;2"' IBAN
inc i : Nation[i] = "TR|05|16|Türkei|Msk 5;1,16"' 1 reserviertes Zeichen = 0 ' IBAN
inc i : Nation[i] = "TN|05|15|Tunesien|Msk 5,13;2"' IBAN
inc i : Nation[i] = "AE|03|16|Vereinigte Arabische Emirate|Msk ,"' IBAN
inc i : Nation[i] = "VG|04|16|Virgin Islands|Msk ,"' IBAN

Proc ToMaxLen

    ' mit Nullen auffüllen

    If PType$(1)="$"

        Parameters String Wert, Integer mLen
        Return Right$(MkStr$("0",mLen) + Trim$(Upper$(Wert)), mLen)

    Else

        Parameters Quadint qWert, Integer mLen
        Return Right$(MkStr$("0",mLen) + Trim$(Str$(qWert)), mLen)

    EndIf

EndProc

Proc NatKen_To_Pruef

    ' Nationen-Kennung in Ziffern
    Parameters String NatKenn
    Return ToMaxLen(Trim$(Str$(Ord(Mid$(Right$(Trim$(Upper$(NatKenn)),2),1,1)) - 55)),2) + ToMaxLen(Trim$(Str$(Ord(Mid$(Right$(Trim$(Upper$(NatKenn)),2),2,1)) - 55)),2) + "00"

EndProc

Proc PruefZiffer' obwohl hier ja 2 Ziffern ermittelt werden, also eine Prüfzahl

    Declare String PruefStr, Quadint Q,R
    PruefStr = ToMaxLen(BLZ,BLZ_Max) + ToMaxLen(Kto,Kto_Max) + NatKen_To_Pruef(NatKenn)
    R = 0

    While Len(PruefStr) > 0

        Q = Val(Left$(PruefStr,9))
        PruefStr = Right$(PruefStr,Len(PruefStr) - 9)
        R = Q mod 97
        Case Len(PruefStr) > 0 : PruefStr = ToMaxLen(R,2) + PruefStr

    EndWhile

    Q = 98 - R
    Return ToMaxLen(Q,2)

EndProc

Proc Make_NatBlock' z.B. DExx  (für JE wird nur der rechte Teil von NatKenn gebraucht)

    Return Right$(Trim$(Upper$(NatKenn)),2) + PruefZiffer()

EndProc

Proc Korrektur

    ' Leerzeichen müssen raus
    BLZ = Translate$(BLZ," ","")
    Kto = Translate$(Kto," ","")
    ' Bei IT und SM gibt es eine Prüfziffer als Buchstabe in BLZ, muss umgewandelt werden.

    If (NatKenn = "IT") or (NatKenn = "SM")

        If Ord(Left$(Upper$(BLZ),1)) >= 65

            BLZ = ToMaxLen(Trim$(Str$(Ord(Left$(NatKenn,1)) - 55)),2) + Right$(BLZ,Len(BLZ)-1)

        EndIf

    EndIf

    ' Bei TR gibt es ein zusätzliches reserviertes Zeichen hinter der BLZ

    If (NatKenn = "TR")

        BLZ = BLZ + "0"

    EndIf

EndProc

Proc IBAN_edv' alles zusammenhängend zurückgeben

    Korrektur()
    Return Make_NatBlock() + ToMaxLen(BLZ,BLZ_Max) + ToMaxLen(Kto,Kto_Max)

EndProc

Proc IBAN_druck' alles in 4-er Blöcken mit führendem IBAN

    Declare String Block1, Block
    Block1 = IBAN_edv()
    Block = ""

    While Len(Block1) > 0

        Block = Block + " " + Left$(Block1,4)
        Block1 = Right$(Block1,Len(Block1) - 4)

    EndWhile

    Return "IBAN" + Block

EndProc

Proc getNat

    Parameters String NK
    Var Integer NatIdx = 2

    WhileLoop 0, SizeOf(Nation[]) - 1

        If SubStr$(Nation[&loop],1,"|") = Upper$(NK)

            NatIdx = &loop
            BREAK

        EndIf

    EndWhile

    NatKenn = SubStr$(Nation[NatIdx],1,"|")
    BLZ_Max = Val(Trim$(SubStr$(Nation[NatIdx],2,"|")))
    Kto_Max = Val(Trim$(SubStr$(Nation[NatIdx],3,"|")))
    Land = SubStr$(Nation[NatIdx],4,"|")
    Maske = SubStr$(Nation[NatIdx],5,"|")
    NationIdx = NatIdx

EndProc

Cls
getNat("DE")
BLZ = "850 503 00"
Kto = "4000 428549"
Print IBAN_edv()
Print IBAN_druck()
print "Sollte --DE25 8505 0300 4000 4285 49-- sein..."
WaitInput
end
 
Website:  [...] 
Facebook:  [...] 
28.12.2015  
 



sehr nett!
 
28.12.2015  
 




Jörg
Sellmeyer
Kleiner Tip noch:
Proc LKZ

    Parameters BS$
    Declare LKZahl&
    LKZahl& = Ord(BS$) - 55
    Return LKZahl&

EndProc


Spart ne Menge Codezeilen.

Und solche Konstrukte sind auch schon lange nicht mehr nötig:
LKZ Left$(LK$,1)
ZF$=Str$(&(0))

Auch die Freeweare-Version kommt schon damit zurecht:
ZF$ = LKZ(Left$(LK$,1))
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
28.12.2015  
 




ByteAttack
Jau - Danke. Hab es aber extra mit vielen, vielen Codzeilen geschrieben, da es sonst hier im Forum so klein daher kommt

Weiterhin kann man dann genauer sehen, warum und weshalb - Deswegen auch der halbe Roman als Kommentare

Ne andere Ausrede fällt mir jetzt auch nicht mehr ein.
(Das Let Variable% habe ich mir aber abgewöhnt)
 
XProfan X3
Website:  [...] 
Facebook:  [...] 
28.12.2015  
 




Michael
W.
Ich hab mir das auch verwurstet...
Declare String Nation[], Integer NationIdx,i
Declare String NatKenn, BLZ_Max, Kto_Max, Land, Maske, NatBlock, BLZ, Kto
' NatKenn | BLZ | Kto | Land | Maske
' BLZ: 11, Kto: 22
i = 0 : Nation[i] = "BE|03|09|Belgien|Msk ,"' IBAN BExx xxxx xxxx xxxx
inc i : Nation[i] = "BG|08|10|Bulgarien|Msk ,"' IBAN BGxx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "DE|08|10|Deutschland|Msk ,"' IBAN DExx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "DK|04|10|Dänemark|Msk ,"' IBAN DKxx xxxx xxxx xxxx xx
inc i : Nation[i] = "EE|04|12|Estland|Msk ,"' IBAN EExx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "FI|06|08|Finnland|Msk ,"' IBAN FIxx xxxx xxxx xxxx xx
inc i : Nation[i] = "FR|10|13|Frankreich|Msk ,"' IBAN FRxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "GF|10|13|Französisch-Guiana|Msk ,"' IBAN GFxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "PF|10|13|Französisch-Polynesien|Msk ,"' IBAN PFxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "GI|04|15|Gibraltar|Msk ,"' IBAN GIxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "GR|07|16|Griechenland|Msk ,"' IBAN GRxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "GB|10|08|Großbritannien|Msk ,"' IBAN GBxx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "GP|10|13|Guadeloupe|Msk ,"' IBAN GPxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "IE|10|08|Irland|Msk ,"' IBAN IExx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "IS|04|18|Island (EWR- nicht EU-Mitglied)|Msk ,"' IBAN ISxx xxxx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "IT|11|12|Italien (1bu+10blz)|Msk 1;10,12"' 1-stellige Prüfziffer (Buchstabe) + 10-stelliger Bankcode ' IBAN ITxx Xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "HR|07|10|Kroatien|Msk ,"' IBAN HRxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "LV|04|13|Lettland|Msk ,"' IBAN LVxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "LI|05|12|Liechtenstein (EWR- nicht EU-Mitglied)|Msk ,"' IBAN LIxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "LT|05|11|Litauen|Msk ,"' IBAN LTxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "LU|03|13|Luxemburg|Msk ,"' IBAN LUxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "MT|09|18|Malta|Msk ,"' IBAN MTxx xxxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "MQ|03|13|Martinique|Msk ,"' IBAN MQxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "YT|10|13|Mayotte|Msk ,"' IBAN YTxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "MC|10|13|Monaco (kein EU/EWR-Staat)|Msk ,"' IBAN MCxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "NC|10|13|Neukaledonien|Msk ,"' IBAN NCxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "NL|04|10|Niederlande|Msk ,"' IBAN NLxx xxxx xxxx xxxx xx
inc i : Nation[i] = "NO|04|07|Norwegen (EWR- nicht EU-Mitglied)|Msk ,"' IBAN NOxx xxxx xxxx xxx
inc i : Nation[i] = "AT|05|11|Österreich|Msk ,"' IBAN ATxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "PL|08|16|Polen|Msk ,"' IBAN PLxx xxxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "PT|08|13|Portugal einschl. Azoren und Madeira|Msk ,"' IBAN PTxx xxxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "RE|10|13|Réunion|Msk ,"' IBAN RExx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "RO|04|16|Rumänien|Msk ,"' IBAN ROxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "PM|10|13|Saint Pierre und Miquelon|Msk ,"' IBAN PMxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "SM|11|12|San Marino (kein EU/EWR-Staat) (1bu+10blz)|Msk 1;10,12"' 1-stellige Prüfziffer (Buchstabe) + 10-stelliger Bankcode ' IBAN SMxx Xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "CH|05|12|Schweiz (kein EU/EWR-Staat)|Msk ,"' IBAN CHxx xxxx xxxx xxxx xxxx x
inc i : Nation[i] = "SE|03|17|Schweden|Msk ,"' IBAN SExx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "SK|04|16|Slowakei|Msk ,"' IBAN SKxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "SI|05|10|Slowenien|Msk ,"' IBAN SIxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "ES|08|12|Spanien einschl. Kanarische Inseln|Msk ,"' IBAN ESxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "CZ|04|16|Tschechische Republik|Msk ,"' IBAN CZxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "HU|07|17|Ungarn|Msk ,"' IBAN HUxx xxxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "CY|08|16|Zypern|Msk ,"' IBAN CYxx xxxx xxxx xxxx xxxx xxxx xxxx
inc i : Nation[i] = "AL|08|16|Albanien|Msk ,"' IBAN
inc i : Nation[i] = "AD|08|12|Andorra|Msk ,"' IBAN
inc i : Nation[i] = "AZ|04|20|Aserbaidschan|Msk ,"' IBAN
inc i : Nation[i] = "BH|04|14|Bahrain|Msk ,"' IBAN
inc i : Nation[i] = "BA|06|10|Bosnien-Herzegowina|Msk 6,8;2"' IBAN
inc i : Nation[i] = "CR|03|14|Costa Rica|Msk ,"' IBAN
inc i : Nation[i] = "DO|04|20|Dominikanische Republik|Msk ,"' IBAN
inc i : Nation[i] = "GE|02|16|Georgien|Msk ,"' IBAN
inc i : Nation[i] = "IL|06|13|Israel|Msk ,"' IBAN
inc i : Nation[i] = "JE_GB|10|08|Jersey (IBAN Großbritannien)|Msk ,"' IBAN GBxx xxxx xxxx xxxx xxxx xx
inc i : Nation[i] = "JE_FR|10|13|Jersey (IBAN Frankreich)|Msk ,"' IBAN FRxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "JO|08|18|Jordanien|Msk 4;4,18"' IBAN
inc i : Nation[i] = "KZ|03|13|Kasachstan|Msk ,"' IBAN
inc i : Nation[i] = "KW|04|22|Kuwait|Msk ,"' IBAN
inc i : Nation[i] = "LB|04|20|Libanon|Msk ,"' IBAN
inc i : Nation[i] = "MR|10|13|Mauretanien|Msk 10,11;2"' IBAN MRxx xxxx xxxx xxxx xxxx xxxx xxx
inc i : Nation[i] = "MU|08|18|Mauritius|Msk 4;2;2,12;3;3"' IBAN
inc i : Nation[i] = "MK|03|12|Mazedonien|Msk 3,10;2"' IBAN
inc i : Nation[i] = "MD|02|18|Moldawien|Msk ,"' IBAN
inc i : Nation[i] = "ME|02|15|Montenegro|Msk 2,13;2"' IBAN
inc i : Nation[i] = "PK|04|16|Pakistan|Msk ,"' IBAN
inc i : Nation[i] = "PS|04|21|Palästina|Msk ,"' IBAN
inc i : Nation[i] = "QA|04|21|Qatar|Msk ,"' IBAN
inc i : Nation[i] = "SA|02|18|Saudi Arabien|Msk ,"' IBAN
inc i : Nation[i] = "RS|02|15|Serbien|Msk 2,13;2"' IBAN
inc i : Nation[i] = "TR|05|16|Türkei|Msk 5;1,16"' 1 reserviertes Zeichen = 0 ' IBAN
inc i : Nation[i] = "TN|05|15|Tunesien|Msk 5,13;2"' IBAN
inc i : Nation[i] = "AE|03|16|Vereinigte Arabische Emirate|Msk ,"' IBAN
inc i : Nation[i] = "VG|04|16|Virgin Islands|Msk ,"' IBAN

Proc ToMaxLen

    ' mit Nullen auffüllen

    If PType$(1)="$"

        Parameters String Wert, Integer mLen
        Return Right$(MkStr$("0",mLen) + Trim$(Upper$(Wert)), mLen)

    Else

        Parameters Quadint qWert, Integer mLen
        Return Right$(MkStr$("0",mLen) + Trim$(Str$(qWert)), mLen)

    EndIf

EndProc

Proc NatKen_To_Pruef

    ' Nationen-Kennung in Ziffern
    Parameters String NatKenn
    Return ToMaxLen(Trim$(Str$(Ord(Mid$(Right$(Trim$(Upper$(NatKenn)),2),1,1)) - 55)),2) + ToMaxLen(Trim$(Str$(Ord(Mid$(Right$(Trim$(Upper$(NatKenn)),2),2,1)) - 55)),2) + "00"

EndProc

Proc PruefZiffer' obwohl hier ja 2 Ziffern ermittelt werden, also eine Prüfzahl

    Declare String PruefStr, Quadint Q,R
    PruefStr = ToMaxLen(BLZ,BLZ_Max) + ToMaxLen(Kto,Kto_Max) + NatKen_To_Pruef(NatKenn)
    R = 0

    While Len(PruefStr) > 0

        Q = Val(Left$(PruefStr,9))
        PruefStr = Right$(PruefStr,Len(PruefStr) - 9)
        R = Q mod 97
        Case Len(PruefStr) > 0 : PruefStr = ToMaxLen(R,2) + PruefStr

    EndWhile

    Q = 98 - R
    Return ToMaxLen(Q,2)

EndProc

Proc Make_NatBlock' z.B. DExx  (für JE wird nur der rechte Teil von NatKenn gebraucht)

    Return Right$(Trim$(Upper$(NatKenn)),2) + PruefZiffer()

EndProc

Proc Korrektur

    ' Leerzeichen müssen raus
    BLZ = Translate$(BLZ," ","")
    Kto = Translate$(Kto," ","")
    ' Bei IT und SM gibt es eine Prüfziffer als Buchstabe in BLZ, muss umgewandelt werden.

    If (NatKenn = "IT") or (NatKenn = "SM")

        If Ord(Left$(Upper$(BLZ),1)) >= 65

            BLZ = ToMaxLen(Trim$(Str$(Ord(Left$(NatKenn,1)) - 55)),2) + Right$(BLZ,Len(BLZ)-1)

        EndIf

    EndIf

    ' Bei TR gibt es ein zusätzliches reserviertes Zeichen hinter der BLZ

    If (NatKenn = "TR")

        BLZ = BLZ + "0"

    EndIf

EndProc

Proc IBAN_edv' alles zusammenhängend zurückgeben

    Korrektur()
    Return Make_NatBlock() + ToMaxLen(BLZ,BLZ_Max) + ToMaxLen(Kto,Kto_Max)

EndProc

Proc IBAN_druck' alles in 4-er Blöcken mit führendem IBAN

    Declare String Block1, Block
    Block1 = IBAN_edv()
    Block = ""

    While Len(Block1) > 0

        Block = Block + " " + Left$(Block1,4)
        Block1 = Right$(Block1,Len(Block1) - 4)

    EndWhile

    Return "IBAN" + Block

EndProc

Proc getNat

    Parameters String NK
    Var Integer NatIdx = 2

    WhileLoop 0, SizeOf(Nation[]) - 1

        If SubStr$(Nation[&loop],1,"|") = Upper$(NK)

            NatIdx = &loop
            BREAK

        EndIf

    EndWhile

    NatKenn = SubStr$(Nation[NatIdx],1,"|")
    BLZ_Max = Val(Trim$(SubStr$(Nation[NatIdx],2,"|")))
    Kto_Max = Val(Trim$(SubStr$(Nation[NatIdx],3,"|")))
    Land = SubStr$(Nation[NatIdx],4,"|")
    Maske = SubStr$(Nation[NatIdx],5,"|")
    NationIdx = NatIdx

EndProc

Cls
getNat("DE")
BLZ = "850 503 00"
Kto = "4000 428549"
Print IBAN_edv()
Print IBAN_druck()
print "Sollte --DE25 8505 0300 4000 4285 49-- sein..."
WaitInput
end
 
XProfan X3
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
31.12.2015  
 



Kann XProfan noch kein

a[]="..."

um Einträge hinzuzufügen?
 
31.12.2015  
 




Michael
W.
Dann läuft's nur unter der allerneuesten Version, aber ja - kann XProfan selbstverständlich...
Ich hatte erst selbst gezählt und hab dann schnell umgemodelt...

Da fehlt jetzt noch das Eingabemasken basteln. Die Werte sind teilweise hinten schon mit eingefügt...

Quelle war:  [...] 
 
XProfan X3
System: Windows 8/10, XProfan X4
Programmieren, das spannendste Detektivspiel der Welt.
31.12.2015  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

8.852 Betrachtungen

Unbenanntvor 0 min.
p.specht18.11.2021
Peter Max Müller18.11.2021
Wilfried Friebe17.11.2021
Jürgen Strahl17.11.2021
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie