Quelltexte/ Codesnippets | | | | 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
|
| | | | |
| | | | | | | |
| | Jörg Sellmeyer | Kleiner Tip noch:
Spart ne Menge Codezeilen.
Und solche Konstrukte sind auch schon lange nicht mehr nötig:
Auch die Freeweare-Version kommt schon damit zurecht:
|
| | | | |
| | 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) |
| | | | |
| | 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 X3System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 31.12.2015 ▲ |
| |
| | | Kann XProfan noch kein
a[]="..."
um Einträge hinzuzufügen? |
| | | | |
| | 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 X3System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 31.12.2015 ▲ |
| |
|
Zum QuelltextThemenoptionen | 8.856 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |