Impressum  |   RSS  |  Registrieren

tsql

IBAN validieren

IBAN steht für “International Bank Account Number” und stellt eine Norm für Bankkontodaten dar. Genauere Informationen dazu findet man in der ISO-NORM ISO 13616:2003. Ich möchte hier nicht weiter auf den Zweck und die Einsatzgebiete der IBAN eingehen, sondern eine Klasse zur Überprüfung selbiger vorstellen. Die IBAN beginnt mit einem zweistelligen Ländercode nach ISO 3166-1, gefolgt von einer zweistelligen Prüfsumme sowie der Bankleitzahl und der Kontonummer. Nachfolgende Klasse kann direkt in vorhandene Projekte eingebunden werden. Ein Beispiel zur Einbindung befindet sich am Ende dieser Seite.
 
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
using System;
 
class IBAN_validieren
{
  private string IBAN;
 
  /*
  * CSharp IBAN validieren
  * Der Konstruktor erwartet die Übergabe der zu testenden IBAN
  */
  public IBAN_validieren(string sIBAN)
  {
    IBAN = sIBAN;
  }
 
  /*
  * CSharp ISIBAN
  * Liefert True für korrekte IBAN, sonst false
  */
  public bool ISIBAN()
  {
    //Leerzeichen entfernen
    string mysIBAN = IBAN.Replace(" ", "");
    //Eine IBAN hat maximal 34 Stellen
    if (mysIBAN.Length > 34 || mysIBAN.Length < 5)
      return false; //IBAN ist zu lang oder viel zu lang
    else
    {
      string LaenderCode = mysIBAN.Substring(0, 2).ToUpper();
      string Pruefsumme = mysIBAN.Substring(2, 2).ToUpper();
      string BLZ_Konto = mysIBAN.Substring(4).ToUpper();
 
      if (!IsNumeric(Pruefsumme))
        return false; //Prüfsumme ist nicht numerisch
 
      if (!ISLaendercode(LaenderCode))
        return false; //Ländercode ist ungültig
 
      //Pruefsumme validieren
      string Umstellung = BLZ_Konto + LaenderCode + "00";
      string Modulus = IBANCleaner(Umstellung);
      if (98 - Modulo(Modulus, 97) != int.Parse(Pruefsumme))
        return false;  //Prüfsumme ist fehlerhaft 
    }
    return true;
  }
 
  /*
   * CSharp Ländercode
   * Test auf korrekten Ländercode nach ISO 3166-1
   */
  private bool ISLaendercode(string code)
  {
    // Der Code muss laut ISO 3166-1 ein 2-stelliger Ländercode aus Buchstaben sein.
    if (code.Length != 2)
      return false;
    else
    {
      code = code.ToUpper();
      string[] Laendercodes = { "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", 
        "AJ", "AK", "AL", "AM", "AN", "AO", "AP", "AQ", "AR", "AS", "AT", "AU", "AV",
        "AW", "AX", "AY", "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI",
        "BJ", "BK", "BL", "BM", "BN", "BO", "BP", "BQ", "BR", "BS", "BT", "BU", "BV",
        "BW", "BX", "BY", "BZ", "CA", "CB", "CC", "CD", "CE", "CF", "CG", "CH", "CI",
        "CJ", "CK", "CL", "CM", "CN", "CO", "CP", "CQ", "CR", "CS", "CT", "CU", "CV",
        "CW", "CX", "CY", "CZ", "DA", "DB", "DC", "DD", "DE", "DF", "DG", "DH", "DI",
        "DJ", "DK", "DL", "DM", "DN", "DO", "DP", "DQ", "DR", "DS", "DT", "DU", "DV",
        "DW", "DX", "DY", "DZ", "EA", "EB", "EC", "ED", "EE", "EF", "EG", "EH", "EI",
        "EJ", "EK", "EL", "EM", "EN", "EO", "EP", "EQ", "ER", "ES", "ET", "EU", "EV",
        "EW", "EX", "EY", "EZ", "FA", "FB", "FC", "FD", "FE", "FF", "FG", "FH", "FI",
        "FJ", "FK", "FL", "FM", "FN", "FO", "FP", "FQ", "FR", "FS", "FT", "FU", "FV",
        "FW", "FX", "FY", "FZ", "GA", "GB", "GC", "GD", "GE", "GF", "GG", "GH", "GI",
        "GJ", "GK", "GL", "GM", "GN", "GO", "GP", "GQ", "GR", "GS", "GT", "GU", "GV",
        "GW", "GX", "GY", "GZ", "HA", "HB", "HC", "HD", "HE", "HF", "HG", "HH", "HI",
        "HJ", "HK", "HL", "HM", "HN", "HO", "HP", "HQ", "HR", "HS", "HT", "HU", "HV",
        "HW", "HX", "HY", "HZ", "IA", "IB", "IC", "ID", "IE", "IF", "IG", "IH", "II",
        "IJ", "IK", "IL", "IM", "IN", "IO", "IP", "IQ", "IR", "IS", "IT", "IU", "IV",
        "IW", "IX", "IY", "IZ", "JA", "JB", "JC", "JD", "JE", "JF", "JG", "JH", "JI",
        "JJ", "JK", "JL", "JM", "JN", "JO", "JP", "JQ", "JR", "JS", "JT", "JU", "JV",
        "JW", "JX", "JY", "JZ", "KA", "KB", "KC", "KD", "KE", "KF", "KG", "KH", "KI",
        "KJ", "KK", "KL", "KM", "KN", "KO", "KP", "KQ", "KR", "KS", "KT", "KU", "KV",
        "KW", "KX", "KY", "KZ", "LA", "LB", "LC", "LD", "LE", "LF", "LG", "LH", "LI",
        "LJ", "LK", "LL", "LM", "LN", "LO", "LP", "LQ", "LR", "LS", "LT", "LU", "LV",
        "LW", "LX", "LY", "LZ", "MA", "MB", "MC", "MD", "ME", "MF", "MG", "MH", "MI",
        "MJ", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV",
        "MW", "MX", "MY", "MZ", "NA", "NB", "NC", "ND", "NE", "NF", "NG", "NH", "NI",
        "NJ", "NK", "NL", "NM", "NN", "NO", "NP", "NQ", "NR", "NS", "NT", "NU", "NV",
        "NW", "NX", "NY", "NZ", "OA", "OB", "OC", "OD", "OE", "OF", "OG", "OH", "OI",
        "OJ", "OK", "OL", "OM", "ON", "OO", "OP", "OQ", "OR", "OS", "OT", "OU", "OV",
        "OW", "OX", "OY", "OZ", "PA", "PB", "PC", "PD", "PE", "PF", "PG", "PH", "PI",
        "PJ", "PK", "PL", "PM", "PN", "PO", "PP", "PQ", "PR", "PS", "PT", "PU", "PV",
        "PW", "PX", "PY", "PZ", "QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH", "QI",
        "QJ", "QK", "QL", "QM", "QN", "QO", "QP", "QQ", "QR", "QS", "QT", "QU", "QV",
        "QW", "QX", "QY", "QZ", "RA", "RB", "RC", "RD", "RE", "RF", "RG", "RH", "RI",
        "RJ", "RK", "RL", "RM", "RN", "RO", "RP", "RQ", "RR", "RS", "RT", "RU", "RV",
        "RW", "RX", "RY", "RZ", "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH", "SI",
        "SJ", "SK", "SL", "SM", "SN", "SO", "SP", "SQ", "SR", "SS", "ST", "SU", "SV",
        "SW", "SX", "SY", "SZ", "TA", "TB", "TC", "TD", "TE", "TF", "TG", "TH", "TI",
        "TJ", "TK", "TL", "TM", "TN", "TO", "TP", "TQ", "TR", "TS", "TT", "TU", "TV",
        "TW", "TX", "TY", "TZ", "UA", "UB", "UC", "UD", "UE", "UF", "UG", "UH", "UI",
        "UJ", "UK", "UL", "UM", "UN", "UO", "UP", "UQ", "UR", "US", "UT", "UU", "UV",
        "UW", "UX", "UY", "UZ", "VA", "VB", "VC", "VD", "VE", "VF", "VG", "VH", "VI",
        "VJ", "VK", "VL", "VM", "VN", "VO", "VP", "VQ", "VR", "VS", "VT", "VU", "VV",
        "VW", "VX", "VY", "VZ", "WA", "WB", "WC", "WD", "WE", "WF", "WG", "WH", "WI",
        "WJ", "WK", "WL", "WM", "WN", "WO", "WP", "WQ", "WR", "WS", "WT", "WU", "WV",
        "WW", "WX", "WY", "WZ", "XA", "XB", "XC", "XD", "XE", "XF", "XG", "XH", "XI",
        "XJ", "XK", "XL", "XM", "XN", "XO", "XP", "XQ", "XR", "XS", "XT", "XU", "XV",
        "XW", "XX", "XY", "XZ", "YA", "YB", "YC", "YD", "YE", "YF", "YG", "YH", "YI",
        "YJ", "YK", "YL", "YM", "YN", "YO", "YP", "YQ", "YR", "YS", "YT", "YU", "YV",
        "YW", "YX", "YY", "YZ", "ZA", "ZB", "ZC", "ZD", "ZE", "ZF", "ZG", "ZH", "ZI",
        "ZJ", "ZK", "ZL", "ZM", "ZN", "ZO", "ZP", "ZQ", "ZR", "ZS", "ZT", "ZU", "ZV",
        "ZW", "ZX", "ZY", "ZZ" };
      if (Array.IndexOf(Laendercodes, code) == -1)
        return false;
      else
        return true;
    }
  }
 
  /*
   * CSharp IBAN Cleaner
   * Buchstaben duch Zahlen ersetzen
   */ 
  private string IBANCleaner(string sIBAN)
  {
    for (int x = 65; x <= 90; x++)
    {
      int replacewith = x - 64 + 9;
      string replace = ((char)x).ToString();
      sIBAN = sIBAN.Replace(replace, replacewith.ToString());
    }
    return sIBAN;
  }
 
  /*
   * CSharp Modulo
   * Es war mir bei diesen großen Zahlen mit C# nicht möglich anderes 
   * an eine Mod Ergebnis zu kommen.
   */ 
  private int Modulo(string sModulus, int iTeiler)
  {
    int iStart,iEnde,iErgebniss,iRestTmp,iBuffer;
    string iRest = "",sErg = "";
 
    iStart = 0;
    iEnde = 0;
 
    while (iEnde <= sModulus.Length - 1)
    {
      iBuffer = int.Parse(iRest + sModulus.Substring(iStart, iEnde - iStart + 1));
 
      if (iBuffer >= iTeiler)
      {
        iErgebniss = iBuffer / iTeiler;
        iRestTmp = iBuffer - iErgebniss * iTeiler;
        iRest = iRestTmp.ToString();
 
        sErg = sErg + iErgebniss.ToString();
 
        iStart = iEnde + 1;
        iEnde = iStart;
      }
      else
      {
        if (sErg != "")
          sErg = sErg + "0";
 
        iEnde = iEnde + 1;
      }
    }
 
    if (iStart <= sModulus.Length)
      iRest = iRest + sModulus.Substring(iStart);
 
    return int.Parse(iRest);
  }
 
  /*
   * Csharp ISNUMERIC
   * Da C# ISNUMERIC als Methode nicht kennt müssen wir selbst ran.
   */
  private bool IsNumeric(string value)
  {
    try
    {
      int.Parse(value);
      return (true);
    }
    catch
    {
      return (false);
    }
  }
}

Mit diesem Aufruf kann die in einer Textbox enthaltene IBAN überprüft werden.

1
2
3
IBAN_validieren ib = new IBAN_validieren(textBox1.Text);
if (!ib.ISIBAN())
    MessageBox.Show("IBAN falsch");

Tags: , , , ,


Weitere Artikel in dieser Kategorie