Autor Beitrag
SSC streezer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

WinXP, Vista Ultimate
C# (VS 05 n' 08), PHP
BeitragVerfasst: Di 09.09.08 08:56 
Hallo - ich mal wieder xD

wie schaffe ich es, ein mehrzeiliges textfeld (1 - n viele zeilen) zu überprüfen ob es eine gültige IBAN Nr. ist?

die klasse zur überprüfung der iban nummer hab ich bereits:
ausblenden volle Höhe C#-Quelltext
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(02).ToUpper();
            string Pruefsumme = mysIBAN.Substring(22).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);
        }
    }
}


das funzt auch wunderbar soweit - jedoch wenn ich das textfeld in dem ich die iban nr. eingebe mehrzeilig mache, dann stürtzt das tool logischerweise ab - nämlich wegen der zeile 150 (substring anweisung).

wie kann ich das problem lösen damit er eine liste von iban nummern einlesen kann und so checked ob sie gültig sind?


vielen dank für eure hilfe,


gruss,
mike

_________________
>> Swiss Soldiers Clan << visit us
SSC streezer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

WinXP, Vista Ultimate
C# (VS 05 n' 08), PHP
BeitragVerfasst: Di 09.09.08 11:14 
hiermit sollte mein vorhaben klar sein - oder doch nicht ? :? :

ausblenden volle Höhe C#-Quelltext
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:
private void txt_ibanline_TextChanged(object sender, EventArgs e)
        {
            IBAN_validieren iban = new IBAN_validieren(txt_ibanlines.Text);
            int i = 0;
            while (i != txt_ibanlines.Text.Length)
            {
                if (!iban.ISIBAN(txt_ibanlines.Lines))
                {
                    pic_ok.Visible = false;
                    pic_error.Visible = true;

                    lbl_false_iban_message.Enabled = true;

                    list_false_IBANS.Enabled = true;
                    list_false_IBANS.Items.Clear();
                    list_false_IBANS.Items.Add(txt_ibanlines.Text);
                }
                else
                {
                    pic_error.Visible = false;
                    pic_ok.Visible = true;

                    lbl_false_iban_message.Enabled = false;

                    list_false_IBANS.Items.Clear();
                    list_false_IBANS.Enabled = false;
                }

                if (txt_ibanlines.Text == "")
                {
                    pic_error.Visible = false;
                    pic_ok.Visible = false;

                    lbl_false_iban_message.Enabled = false;
                    list_false_IBANS.Enabled = false;
                }

                i++;
            }
        }

_________________
>> Swiss Soldiers Clan << visit us
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Di 09.09.08 11:26 
user profile iconSSC streezer hat folgendes geschrieben:
wie schaffe ich es, ein mehrzeiliges textfeld (1 - n viele zeilen) zu überprüfen ob es eine gültige IBAN Nr. ist?
das funzt auch wunderbar soweit - jedoch wenn ich das textfeld in dem ich die iban nr. eingebe mehrzeilig mache, dann stürtzt das tool logischerweise ab - nämlich wegen der zeile 150 (substring anweisung).

wie kann ich das problem lösen damit er eine liste von iban nummern einlesen kann und so checked ob sie gültig sind?

Da musst du jede Zeile einzeln prüfen und für jede IBAN das Ergebnis ausgeben. :oops: Aber das klingt mir als Lösung zu einfach.

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
SSC streezer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

WinXP, Vista Ultimate
C# (VS 05 n' 08), PHP
BeitragVerfasst: Di 09.09.08 11:34 
ja so einfach machen wie möglich xD

aber ich verstehe nicht wo ich das genau einfügen muss... und wie ich das machen muss... :s kannst du mir da helfen? mein lehrmeister wollte mir nicht helfen xD

_________________
>> Swiss Soldiers Clan << visit us
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Di 09.09.08 11:39 
Huhu,
Lehrmeister? :shock: Was machst du denn?

ausblenden C#-Quelltext
1:
IBAN_validieren iban = new IBAN_validieren(txt_ibanlines.Text);					

Diese Zeile wird wohl Probleme machen.

Da hätte ich 2 Ansätze:

1. Du spendierst deiner Klasse eine neue public-Methode, die als Parameter eine Liste erwartet und dann die EInträge einzeln abarbeitet.

2. Du Arbeitest die Einträge in der Liste ab, indem du für jede Zeil IBAN_validieren(<entsprechende Zeile>); aufrufst.

Ich hoffe das hilft dir weiter. ;)

PS: Kenne mich mit C# nicht besonders gut aus, nur lesen geht. ;)

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 09.09.08 12:44 
Stichwort: Eigenschaft TextBox.Lines (näheres in der MSDN)
SSC streezer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

WinXP, Vista Ultimate
C# (VS 05 n' 08), PHP
BeitragVerfasst: Di 09.09.08 14:37 
user profile iconfreak4fun hat folgendes geschrieben:
Huhu,
Lehrmeister? :shock: Was machst du denn?

na in der lehre als applikationsentwickler - aber meine bude hat nicht so viel zeit für mich *snif*

Zitat:

ausblenden C#-Quelltext
1:
IBAN_validieren iban = new IBAN_validieren(txt_ibanlines.Text);					

Diese Zeile wird wohl Probleme machen.

Da hätte ich 2 Ansätze:

1. Du spendierst deiner Klasse eine neue public-Methode, die als Parameter eine Liste erwartet und dann die EInträge einzeln abarbeitet.

2. Du Arbeitest die Einträge in der Liste ab, indem du für jede Zeil IBAN_validieren(<entsprechende Zeile>); aufrufst.


vielen dank für die hinweise - sieht shcon ein wenig besser aus und es tut was ich will :P *juhuii*

_________________
>> Swiss Soldiers Clan << visit us
freak4fun
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 604
Erhaltene Danke: 4

Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
BeitragVerfasst: Di 09.09.08 15:24 
Ach so, das kenne ich noch von meiner Ausbildung. Geschadet hat es aber nicht. ;) Ich wünsch dir weiterhin viel Erfolg. :zustimm:

_________________
"Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen