konto_check_ruby 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +26 -0
- data/COPYRIGHT +22 -0
- data/LICENSE +504 -0
- data/README.md +295 -0
- data/bin/konto_check_ruby +202 -0
- data/data/README.md +17 -0
- data/data/blz.lut2f +0 -0
- data/data/iban_regeln.txt +1260 -0
- data/lib/konto_check_ruby/bank_data.rb +421 -0
- data/lib/konto_check_ruby/blz_file.rb +705 -0
- data/lib/konto_check_ruby/check_methods/part1.rb +1634 -0
- data/lib/konto_check_ruby/check_methods/part2.rb +1604 -0
- data/lib/konto_check_ruby/check_methods/part3.rb +1905 -0
- data/lib/konto_check_ruby/check_methods/part4.rb +1738 -0
- data/lib/konto_check_ruby/check_methods/part5.rb +1407 -0
- data/lib/konto_check_ruby/check_methods.rb +147 -0
- data/lib/konto_check_ruby/collation.rb +52 -0
- data/lib/konto_check_ruby/engine.rb +1006 -0
- data/lib/konto_check_ruby/iban_rules.rb +1060 -0
- data/lib/konto_check_ruby/konto_check.rb +1578 -0
- data/lib/konto_check_ruby/lut_file.rb +457 -0
- data/lib/konto_check_ruby/raw.rb +614 -0
- data/lib/konto_check_ruby/retvals.rb +826 -0
- data/lib/konto_check_ruby/search.rb +440 -0
- data/lib/konto_check_ruby/update.rb +176 -0
- data/lib/konto_check_ruby/version.rb +18 -0
- data/lib/konto_check_ruby.rb +42 -0
- metadata +112 -0
|
@@ -0,0 +1,1905 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# This file is part of konto_check_ruby, a Ruby port of the C library
|
|
4
|
+
# konto_check, Copyright (C) 2002-2023 Michael Plugge <konto_check@yahoo.com>.
|
|
5
|
+
# Ruby port Copyright (C) 2026 tickettoaster GmbH <https://tickettoaster.de>.
|
|
6
|
+
#
|
|
7
|
+
# konto_check_ruby is free software; you can redistribute it and/or modify it
|
|
8
|
+
# under the terms of the GNU Lesser General Public License as published by
|
|
9
|
+
# the Free Software Foundation; either version 2.1 of the License, or (at
|
|
10
|
+
# your option) any later version. It is distributed WITHOUT ANY WARRANTY; see
|
|
11
|
+
# the file LICENSE for details.
|
|
12
|
+
|
|
13
|
+
module KontoCheckRuby
|
|
14
|
+
module CheckMethods
|
|
15
|
+
extend self
|
|
16
|
+
|
|
17
|
+
# Methode 78
|
|
18
|
+
# Modulus 10, Gewichtung 2, 1, 2, 1, 2, 1, 2, 1, 2 (wie Methode 00).
|
|
19
|
+
# Ausnahme: 10-stellige Kontonummern, die mit 00 beginnen und deren
|
|
20
|
+
# 3. Stelle ungleich 0 ist, sind ohne Pruefziffer gueltig.
|
|
21
|
+
def m78(kto, blz, um, rv)
|
|
22
|
+
if rv
|
|
23
|
+
rv.methode = "78"
|
|
24
|
+
rv.pz_methode = 78
|
|
25
|
+
end
|
|
26
|
+
return OK_NO_CHK if kto[0] == 0 && kto[1] == 0 && kto[2] != 0
|
|
27
|
+
|
|
28
|
+
pz = kto[1] + kto[3] + kto[5] + kto[7]
|
|
29
|
+
pz += kto[0] < 5 ? kto[0] * 2 : kto[0] * 2 - 9
|
|
30
|
+
pz += kto[2] < 5 ? kto[2] * 2 : kto[2] * 2 - 9
|
|
31
|
+
pz += kto[4] < 5 ? kto[4] * 2 : kto[4] * 2 - 9
|
|
32
|
+
pz += kto[6] < 5 ? kto[6] * 2 : kto[6] * 2 - 9
|
|
33
|
+
pz += kto[8] < 5 ? kto[8] * 2 : kto[8] * 2 - 9
|
|
34
|
+
|
|
35
|
+
pz %= 10
|
|
36
|
+
pz = 10 - pz if pz != 0
|
|
37
|
+
# CHECK_PZ10
|
|
38
|
+
if rv
|
|
39
|
+
rv.pz_pos = 10
|
|
40
|
+
rv.pz = pz
|
|
41
|
+
end
|
|
42
|
+
kto[9] == pz ? OK : FALSE
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Methode 79
|
|
46
|
+
# Modulus 10, Gewichtung 2, 1, 2, 1, 2, 1, 2, 1.
|
|
47
|
+
# Bei Kontonummern mit 1, 2 oder 9 an der 1. Stelle liegt die Pruefziffer
|
|
48
|
+
# an Stelle 9, sonst an Stelle 10. Die 1. Stelle darf nicht 0 sein.
|
|
49
|
+
def m79(kto, blz, um, rv)
|
|
50
|
+
if rv
|
|
51
|
+
rv.methode = "79"
|
|
52
|
+
rv.pz_methode = 79
|
|
53
|
+
end
|
|
54
|
+
return INVALID_KTO if kto[0] == 0
|
|
55
|
+
|
|
56
|
+
if kto[0] == 1 || kto[0] == 2 || kto[0] == 9
|
|
57
|
+
pz = kto[0] + kto[2] + kto[4] + kto[6]
|
|
58
|
+
pz += kto[1] < 5 ? kto[1] * 2 : kto[1] * 2 - 9
|
|
59
|
+
pz += kto[3] < 5 ? kto[3] * 2 : kto[3] * 2 - 9
|
|
60
|
+
pz += kto[5] < 5 ? kto[5] * 2 : kto[5] * 2 - 9
|
|
61
|
+
pz += kto[7] < 5 ? kto[7] * 2 : kto[7] * 2 - 9
|
|
62
|
+
|
|
63
|
+
pz %= 10
|
|
64
|
+
pz = 10 - pz if pz != 0
|
|
65
|
+
# CHECK_PZ9
|
|
66
|
+
if rv
|
|
67
|
+
rv.pz_pos = 9
|
|
68
|
+
rv.pz = pz
|
|
69
|
+
end
|
|
70
|
+
kto[8] == pz ? OK : FALSE
|
|
71
|
+
else
|
|
72
|
+
pz = kto[1] + kto[3] + kto[5] + kto[7]
|
|
73
|
+
pz += kto[0] < 5 ? kto[0] * 2 : kto[0] * 2 - 9
|
|
74
|
+
pz += kto[2] < 5 ? kto[2] * 2 : kto[2] * 2 - 9
|
|
75
|
+
pz += kto[4] < 5 ? kto[4] * 2 : kto[4] * 2 - 9
|
|
76
|
+
pz += kto[6] < 5 ? kto[6] * 2 : kto[6] * 2 - 9
|
|
77
|
+
pz += kto[8] < 5 ? kto[8] * 2 : kto[8] * 2 - 9
|
|
78
|
+
|
|
79
|
+
pz %= 10
|
|
80
|
+
pz = 10 - pz if pz != 0
|
|
81
|
+
# CHECK_PZ10
|
|
82
|
+
if rv
|
|
83
|
+
rv.pz_pos = 10
|
|
84
|
+
rv.pz = pz
|
|
85
|
+
end
|
|
86
|
+
kto[9] == pz ? OK : FALSE
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Methode 80
|
|
91
|
+
# Modulus 10, Gewichtung 2, 1, 2, 1, 2 (Variante 1) bzw. Modulus 7
|
|
92
|
+
# (Variante 2); Ausnahme: 3. Stelle = 9 -> Berechnung wie Verfahren 51.
|
|
93
|
+
def m80(kto, blz, um, rv)
|
|
94
|
+
if kto[2] == 9 # Berechnung wie in Verfahren 51
|
|
95
|
+
m3080(kto, blz, um, rv)
|
|
96
|
+
else
|
|
97
|
+
m1080(kto, blz, um, rv)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Methode 80c (Ausnahme, Variante 1)
|
|
102
|
+
def m3080(kto, blz, um, rv)
|
|
103
|
+
if rv
|
|
104
|
+
rv.methode = "80c"
|
|
105
|
+
rv.pz_methode = 3080
|
|
106
|
+
end
|
|
107
|
+
pz = 9 * 8 +
|
|
108
|
+
kto[3] * 7 +
|
|
109
|
+
kto[4] * 6 +
|
|
110
|
+
kto[5] * 5 +
|
|
111
|
+
kto[6] * 4 +
|
|
112
|
+
kto[7] * 3 +
|
|
113
|
+
kto[8] * 2
|
|
114
|
+
|
|
115
|
+
pz %= 11
|
|
116
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
117
|
+
# CHECK_PZX10
|
|
118
|
+
if rv
|
|
119
|
+
rv.pz_pos = 10
|
|
120
|
+
rv.pz = pz
|
|
121
|
+
end
|
|
122
|
+
return OK if kto[9] == pz
|
|
123
|
+
return FALSE if um != 0
|
|
124
|
+
|
|
125
|
+
m4080(kto, blz, um, rv)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Methode 80d (Ausnahme, Variante 2)
|
|
129
|
+
def m4080(kto, blz, um, rv)
|
|
130
|
+
if rv
|
|
131
|
+
rv.methode = "80d"
|
|
132
|
+
rv.pz_methode = 4080
|
|
133
|
+
end
|
|
134
|
+
pz = kto[0] * 10 +
|
|
135
|
+
kto[1] * 9 +
|
|
136
|
+
9 * 8 +
|
|
137
|
+
kto[3] * 7 +
|
|
138
|
+
kto[4] * 6 +
|
|
139
|
+
kto[5] * 5 +
|
|
140
|
+
kto[6] * 4 +
|
|
141
|
+
kto[7] * 3 +
|
|
142
|
+
kto[8] * 2
|
|
143
|
+
|
|
144
|
+
pz %= 11
|
|
145
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
146
|
+
# CHECK_PZ10
|
|
147
|
+
if rv
|
|
148
|
+
rv.pz_pos = 10
|
|
149
|
+
rv.pz = pz
|
|
150
|
+
end
|
|
151
|
+
kto[9] == pz ? OK : FALSE
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Methode 80a (Variante 1)
|
|
155
|
+
def m1080(kto, blz, um, rv)
|
|
156
|
+
if rv
|
|
157
|
+
rv.methode = "80a"
|
|
158
|
+
rv.pz_methode = 1080
|
|
159
|
+
end
|
|
160
|
+
pz = kto[5] + kto[7]
|
|
161
|
+
pz += kto[4] < 5 ? kto[4] * 2 : kto[4] * 2 - 9
|
|
162
|
+
pz += kto[6] < 5 ? kto[6] * 2 : kto[6] * 2 - 9
|
|
163
|
+
pz += kto[8] < 5 ? kto[8] * 2 : kto[8] * 2 - 9
|
|
164
|
+
|
|
165
|
+
pz %= 10
|
|
166
|
+
pz = 10 - pz if pz != 0
|
|
167
|
+
# CHECK_PZX10
|
|
168
|
+
if rv
|
|
169
|
+
rv.pz_pos = 10
|
|
170
|
+
rv.pz = pz
|
|
171
|
+
end
|
|
172
|
+
return OK if kto[9] == pz
|
|
173
|
+
return FALSE if um != 0
|
|
174
|
+
|
|
175
|
+
m2080(kto, blz, um, rv)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Methode 80b (Variante 2)
|
|
179
|
+
def m2080(kto, blz, um, rv)
|
|
180
|
+
if rv
|
|
181
|
+
rv.methode = "80b"
|
|
182
|
+
rv.pz_methode = 2080
|
|
183
|
+
end
|
|
184
|
+
pz = kto[5] + kto[7]
|
|
185
|
+
pz += kto[4] < 5 ? kto[4] * 2 : kto[4] * 2 - 9
|
|
186
|
+
pz += kto[6] < 5 ? kto[6] * 2 : kto[6] * 2 - 9
|
|
187
|
+
pz += kto[8] < 5 ? kto[8] * 2 : kto[8] * 2 - 9
|
|
188
|
+
|
|
189
|
+
pz %= 7
|
|
190
|
+
pz = 7 - pz if pz != 0
|
|
191
|
+
# CHECK_PZ10
|
|
192
|
+
if rv
|
|
193
|
+
rv.pz_pos = 10
|
|
194
|
+
rv.pz = pz
|
|
195
|
+
end
|
|
196
|
+
kto[9] == pz ? OK : FALSE
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Methode 81
|
|
200
|
+
# Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7; Ausnahme: 3. Stelle = 9 ->
|
|
201
|
+
# Berechnung wie Verfahren 51.
|
|
202
|
+
def m81(kto, blz, um, rv)
|
|
203
|
+
if kto[2] == 9 # Berechnung wie in Verfahren 51
|
|
204
|
+
m2081(kto, blz, um, rv)
|
|
205
|
+
else
|
|
206
|
+
m1081(kto, blz, um, rv)
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Methode 81b (Ausnahme, Variante 1)
|
|
211
|
+
def m2081(kto, blz, um, rv)
|
|
212
|
+
if rv
|
|
213
|
+
rv.methode = "81b"
|
|
214
|
+
rv.pz_methode = 2081
|
|
215
|
+
end
|
|
216
|
+
pz = 9 * 8 +
|
|
217
|
+
kto[3] * 7 +
|
|
218
|
+
kto[4] * 6 +
|
|
219
|
+
kto[5] * 5 +
|
|
220
|
+
kto[6] * 4 +
|
|
221
|
+
kto[7] * 3 +
|
|
222
|
+
kto[8] * 2
|
|
223
|
+
|
|
224
|
+
pz %= 11
|
|
225
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
226
|
+
# CHECK_PZX10
|
|
227
|
+
if rv
|
|
228
|
+
rv.pz_pos = 10
|
|
229
|
+
rv.pz = pz
|
|
230
|
+
end
|
|
231
|
+
return OK if kto[9] == pz
|
|
232
|
+
return FALSE if um != 0
|
|
233
|
+
|
|
234
|
+
m3081(kto, blz, um, rv)
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# Methode 81c (Ausnahme, Variante 2)
|
|
238
|
+
def m3081(kto, blz, um, rv)
|
|
239
|
+
if rv
|
|
240
|
+
rv.methode = "81c"
|
|
241
|
+
rv.pz_methode = 3081
|
|
242
|
+
end
|
|
243
|
+
pz = kto[0] * 10 +
|
|
244
|
+
kto[1] * 9 +
|
|
245
|
+
9 * 8 +
|
|
246
|
+
kto[3] * 7 +
|
|
247
|
+
kto[4] * 6 +
|
|
248
|
+
kto[5] * 5 +
|
|
249
|
+
kto[6] * 4 +
|
|
250
|
+
kto[7] * 3 +
|
|
251
|
+
kto[8] * 2
|
|
252
|
+
|
|
253
|
+
pz %= 11
|
|
254
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
255
|
+
# CHECK_PZ10
|
|
256
|
+
if rv
|
|
257
|
+
rv.pz_pos = 10
|
|
258
|
+
rv.pz = pz
|
|
259
|
+
end
|
|
260
|
+
kto[9] == pz ? OK : FALSE
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Methode 81a (Normalfall)
|
|
264
|
+
def m1081(kto, blz, um, rv)
|
|
265
|
+
if rv
|
|
266
|
+
rv.methode = "81a"
|
|
267
|
+
rv.pz_methode = 1081
|
|
268
|
+
end
|
|
269
|
+
pz = kto[3] * 7 +
|
|
270
|
+
kto[4] * 6 +
|
|
271
|
+
kto[5] * 5 +
|
|
272
|
+
kto[6] * 4 +
|
|
273
|
+
kto[7] * 3 +
|
|
274
|
+
kto[8] * 2
|
|
275
|
+
|
|
276
|
+
pz %= 11
|
|
277
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
278
|
+
# CHECK_PZ10
|
|
279
|
+
if rv
|
|
280
|
+
rv.pz_pos = 10
|
|
281
|
+
rv.pz = pz
|
|
282
|
+
end
|
|
283
|
+
kto[9] == pz ? OK : FALSE
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
# Methode 82
|
|
287
|
+
# Kontonummern mit 99 an der 3./4. Stelle: Verfahren 10, sonst
|
|
288
|
+
# Verfahren 33.
|
|
289
|
+
def m82(kto, blz, um, rv)
|
|
290
|
+
m1082(kto, blz, um, rv)
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
# Methode 82a (Verfahren 10)
|
|
294
|
+
def m1082(kto, blz, um, rv)
|
|
295
|
+
if rv
|
|
296
|
+
rv.methode = "82a"
|
|
297
|
+
rv.pz_methode = 1082
|
|
298
|
+
end
|
|
299
|
+
if kto[2] == 9 && kto[3] == 9
|
|
300
|
+
pz = kto[0] * 10 +
|
|
301
|
+
kto[1] * 9 +
|
|
302
|
+
kto[2] * 8 +
|
|
303
|
+
kto[3] * 7 +
|
|
304
|
+
kto[4] * 6 +
|
|
305
|
+
kto[5] * 5 +
|
|
306
|
+
kto[6] * 4 +
|
|
307
|
+
kto[7] * 3 +
|
|
308
|
+
kto[8] * 2
|
|
309
|
+
|
|
310
|
+
pz %= 11
|
|
311
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
312
|
+
# CHECK_PZ10
|
|
313
|
+
if rv
|
|
314
|
+
rv.pz_pos = 10
|
|
315
|
+
rv.pz = pz
|
|
316
|
+
end
|
|
317
|
+
return kto[9] == pz ? OK : FALSE
|
|
318
|
+
end
|
|
319
|
+
|
|
320
|
+
m2082(kto, blz, um, rv)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
# Methode 82b (Verfahren 33)
|
|
324
|
+
def m2082(kto, blz, um, rv)
|
|
325
|
+
if rv
|
|
326
|
+
rv.methode = "82b"
|
|
327
|
+
rv.pz_methode = 2082
|
|
328
|
+
end
|
|
329
|
+
pz = kto[4] * 6 +
|
|
330
|
+
kto[5] * 5 +
|
|
331
|
+
kto[6] * 4 +
|
|
332
|
+
kto[7] * 3 +
|
|
333
|
+
kto[8] * 2
|
|
334
|
+
|
|
335
|
+
pz %= 11
|
|
336
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
337
|
+
# CHECK_PZ10
|
|
338
|
+
if rv
|
|
339
|
+
rv.pz_pos = 10
|
|
340
|
+
rv.pz = pz
|
|
341
|
+
end
|
|
342
|
+
kto[9] == pz ? OK : FALSE
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
# Methode 83
|
|
346
|
+
# Varianten A (Modulus 11, Gewichtung 2..7), B (Modulus 11, 2..6) und
|
|
347
|
+
# C (Modulus 7, 2..6); Sachkonten (99 an 3./4. Stelle) mit Variante D.
|
|
348
|
+
def m83(kto, blz, um, rv)
|
|
349
|
+
m4083(kto, blz, um, rv)
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
# Methode 83d (Sachkonten)
|
|
353
|
+
def m4083(kto, blz, um, rv)
|
|
354
|
+
if rv
|
|
355
|
+
rv.methode = "83d"
|
|
356
|
+
rv.pz_methode = 4083
|
|
357
|
+
end
|
|
358
|
+
if kto[2] == 9 && kto[3] == 9
|
|
359
|
+
pz = 9 * 8 +
|
|
360
|
+
9 * 7 +
|
|
361
|
+
kto[4] * 6 +
|
|
362
|
+
kto[5] * 5 +
|
|
363
|
+
kto[6] * 4 +
|
|
364
|
+
kto[7] * 3 +
|
|
365
|
+
kto[8] * 2
|
|
366
|
+
|
|
367
|
+
pz %= 11
|
|
368
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
369
|
+
# CHECK_PZ10
|
|
370
|
+
if rv
|
|
371
|
+
rv.pz_pos = 10
|
|
372
|
+
rv.pz = pz
|
|
373
|
+
end
|
|
374
|
+
return kto[9] == pz ? OK : FALSE
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
m1083(kto, blz, um, rv)
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
# Methode 83a
|
|
381
|
+
def m1083(kto, blz, um, rv)
|
|
382
|
+
if rv
|
|
383
|
+
rv.methode = "83a"
|
|
384
|
+
rv.pz_methode = 1083
|
|
385
|
+
end
|
|
386
|
+
pz = kto[3] * 7 +
|
|
387
|
+
kto[4] * 6 +
|
|
388
|
+
kto[5] * 5 +
|
|
389
|
+
kto[6] * 4 +
|
|
390
|
+
kto[7] * 3 +
|
|
391
|
+
kto[8] * 2
|
|
392
|
+
|
|
393
|
+
pz %= 11
|
|
394
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
395
|
+
# CHECK_PZX10
|
|
396
|
+
if rv
|
|
397
|
+
rv.pz_pos = 10
|
|
398
|
+
rv.pz = pz
|
|
399
|
+
end
|
|
400
|
+
return OK if kto[9] == pz
|
|
401
|
+
return FALSE if um != 0
|
|
402
|
+
|
|
403
|
+
m2083(kto, blz, um, rv)
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
# Methode 83b
|
|
407
|
+
def m2083(kto, blz, um, rv)
|
|
408
|
+
if rv
|
|
409
|
+
rv.methode = "83b"
|
|
410
|
+
rv.pz_methode = 2083
|
|
411
|
+
end
|
|
412
|
+
pz = kto[4] * 6 +
|
|
413
|
+
kto[5] * 5 +
|
|
414
|
+
kto[6] * 4 +
|
|
415
|
+
kto[7] * 3 +
|
|
416
|
+
kto[8] * 2
|
|
417
|
+
|
|
418
|
+
pz %= 11
|
|
419
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
420
|
+
# CHECK_PZX10
|
|
421
|
+
if rv
|
|
422
|
+
rv.pz_pos = 10
|
|
423
|
+
rv.pz = pz
|
|
424
|
+
end
|
|
425
|
+
return OK if kto[9] == pz
|
|
426
|
+
return FALSE if um != 0
|
|
427
|
+
|
|
428
|
+
m3083(kto, blz, um, rv)
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
# Methode 83c
|
|
432
|
+
def m3083(kto, blz, um, rv)
|
|
433
|
+
if rv
|
|
434
|
+
rv.methode = "83c"
|
|
435
|
+
rv.pz_methode = 3083
|
|
436
|
+
end
|
|
437
|
+
pz = kto[4] * 6 +
|
|
438
|
+
kto[5] * 5 +
|
|
439
|
+
kto[6] * 4 +
|
|
440
|
+
kto[7] * 3 +
|
|
441
|
+
kto[8] * 2
|
|
442
|
+
|
|
443
|
+
pz %= 7
|
|
444
|
+
pz = 7 - pz if pz != 0
|
|
445
|
+
# CHECK_PZ10
|
|
446
|
+
if rv
|
|
447
|
+
rv.pz_pos = 10
|
|
448
|
+
rv.pz = pz
|
|
449
|
+
end
|
|
450
|
+
kto[9] == pz ? OK : FALSE
|
|
451
|
+
end
|
|
452
|
+
|
|
453
|
+
# Methode 84
|
|
454
|
+
# Varianten A (Modulus 11, 2..6), B (Modulus 7, 2..6) und C (Modulus 10,
|
|
455
|
+
# Gewichtung 2, 1, 2, 1, 2); Ausnahme: 3. Stelle = 9 (Verfahren 51).
|
|
456
|
+
def m84(kto, blz, um, rv)
|
|
457
|
+
if kto[2] == 9 # Berechnung wie in Verfahren 51
|
|
458
|
+
m4084(kto, blz, um, rv)
|
|
459
|
+
else
|
|
460
|
+
m1084(kto, blz, um, rv)
|
|
461
|
+
end
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
# Methode 84d (Ausnahme, Variante 1)
|
|
465
|
+
def m4084(kto, blz, um, rv)
|
|
466
|
+
if rv
|
|
467
|
+
rv.methode = "84d"
|
|
468
|
+
rv.pz_methode = 4084
|
|
469
|
+
end
|
|
470
|
+
pz = 9 * 8 +
|
|
471
|
+
kto[3] * 7 +
|
|
472
|
+
kto[4] * 6 +
|
|
473
|
+
kto[5] * 5 +
|
|
474
|
+
kto[6] * 4 +
|
|
475
|
+
kto[7] * 3 +
|
|
476
|
+
kto[8] * 2
|
|
477
|
+
|
|
478
|
+
pz %= 11
|
|
479
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
480
|
+
# CHECK_PZX10
|
|
481
|
+
if rv
|
|
482
|
+
rv.pz_pos = 10
|
|
483
|
+
rv.pz = pz
|
|
484
|
+
end
|
|
485
|
+
return OK if kto[9] == pz
|
|
486
|
+
return FALSE if um != 0
|
|
487
|
+
|
|
488
|
+
m5084(kto, blz, um, rv)
|
|
489
|
+
end
|
|
490
|
+
|
|
491
|
+
# Methode 84e (Ausnahme, Variante 2)
|
|
492
|
+
def m5084(kto, blz, um, rv)
|
|
493
|
+
if rv
|
|
494
|
+
rv.methode = "84e"
|
|
495
|
+
rv.pz_methode = 5084
|
|
496
|
+
end
|
|
497
|
+
pz = kto[0] * 10 +
|
|
498
|
+
kto[1] * 9 +
|
|
499
|
+
9 * 8 +
|
|
500
|
+
kto[3] * 7 +
|
|
501
|
+
kto[4] * 6 +
|
|
502
|
+
kto[5] * 5 +
|
|
503
|
+
kto[6] * 4 +
|
|
504
|
+
kto[7] * 3 +
|
|
505
|
+
kto[8] * 2
|
|
506
|
+
|
|
507
|
+
pz %= 11
|
|
508
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
509
|
+
# CHECK_PZ10
|
|
510
|
+
if rv
|
|
511
|
+
rv.pz_pos = 10
|
|
512
|
+
rv.pz = pz
|
|
513
|
+
end
|
|
514
|
+
kto[9] == pz ? OK : FALSE
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
# Methode 84a
|
|
518
|
+
def m1084(kto, blz, um, rv)
|
|
519
|
+
if rv
|
|
520
|
+
rv.methode = "84a"
|
|
521
|
+
rv.pz_methode = 1084
|
|
522
|
+
end
|
|
523
|
+
pz = kto[4] * 6 +
|
|
524
|
+
kto[5] * 5 +
|
|
525
|
+
kto[6] * 4 +
|
|
526
|
+
kto[7] * 3 +
|
|
527
|
+
kto[8] * 2
|
|
528
|
+
|
|
529
|
+
pz %= 11
|
|
530
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
531
|
+
# CHECK_PZX10
|
|
532
|
+
if rv
|
|
533
|
+
rv.pz_pos = 10
|
|
534
|
+
rv.pz = pz
|
|
535
|
+
end
|
|
536
|
+
return OK if kto[9] == pz
|
|
537
|
+
return FALSE if um != 0
|
|
538
|
+
|
|
539
|
+
m2084(kto, blz, um, rv)
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
# Methode 84b
|
|
543
|
+
def m2084(kto, blz, um, rv)
|
|
544
|
+
if rv
|
|
545
|
+
rv.methode = "84b"
|
|
546
|
+
rv.pz_methode = 2084
|
|
547
|
+
end
|
|
548
|
+
pz = kto[4] * 6 +
|
|
549
|
+
kto[5] * 5 +
|
|
550
|
+
kto[6] * 4 +
|
|
551
|
+
kto[7] * 3 +
|
|
552
|
+
kto[8] * 2
|
|
553
|
+
|
|
554
|
+
pz %= 7
|
|
555
|
+
pz = 7 - pz if pz != 0
|
|
556
|
+
# CHECK_PZX10
|
|
557
|
+
if rv
|
|
558
|
+
rv.pz_pos = 10
|
|
559
|
+
rv.pz = pz
|
|
560
|
+
end
|
|
561
|
+
return OK if kto[9] == pz
|
|
562
|
+
return FALSE if um != 0
|
|
563
|
+
|
|
564
|
+
m3084(kto, blz, um, rv)
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
# Methode 84c
|
|
568
|
+
def m3084(kto, blz, um, rv)
|
|
569
|
+
if rv
|
|
570
|
+
rv.methode = "84c"
|
|
571
|
+
rv.pz_methode = 3084
|
|
572
|
+
end
|
|
573
|
+
pz = kto[4] * 2 +
|
|
574
|
+
kto[5] +
|
|
575
|
+
kto[6] * 2 +
|
|
576
|
+
kto[7] +
|
|
577
|
+
kto[8] * 2
|
|
578
|
+
|
|
579
|
+
pz %= 10
|
|
580
|
+
pz = 10 - pz if pz != 0
|
|
581
|
+
# CHECK_PZ10
|
|
582
|
+
if rv
|
|
583
|
+
rv.pz_pos = 10
|
|
584
|
+
rv.pz = pz
|
|
585
|
+
end
|
|
586
|
+
kto[9] == pz ? OK : FALSE
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
# Methode 85
|
|
590
|
+
# Varianten A (Modulus 11, 2..7), B (Modulus 11, 2..6) und C (Modulus 7,
|
|
591
|
+
# 2..6); Sachkonten (99 an 3./4. Stelle) mit Variante D.
|
|
592
|
+
def m85(kto, blz, um, rv)
|
|
593
|
+
m4085(kto, blz, um, rv)
|
|
594
|
+
end
|
|
595
|
+
|
|
596
|
+
# Methode 85d (Sachkonten)
|
|
597
|
+
def m4085(kto, blz, um, rv)
|
|
598
|
+
if rv
|
|
599
|
+
rv.methode = "85d"
|
|
600
|
+
rv.pz_methode = 4085
|
|
601
|
+
end
|
|
602
|
+
if kto[2] == 9 && kto[3] == 9
|
|
603
|
+
pz = 9 * 8 +
|
|
604
|
+
9 * 7 +
|
|
605
|
+
kto[4] * 6 +
|
|
606
|
+
kto[5] * 5 +
|
|
607
|
+
kto[6] * 4 +
|
|
608
|
+
kto[7] * 3 +
|
|
609
|
+
kto[8] * 2
|
|
610
|
+
|
|
611
|
+
pz %= 11
|
|
612
|
+
pz = 11 - pz if pz != 0
|
|
613
|
+
# INVALID_PZ10
|
|
614
|
+
if rv
|
|
615
|
+
rv.pz_pos = 10
|
|
616
|
+
rv.pz = pz
|
|
617
|
+
end
|
|
618
|
+
return INVALID_KTO if pz == 10
|
|
619
|
+
|
|
620
|
+
# CHECK_PZ10
|
|
621
|
+
if rv
|
|
622
|
+
rv.pz_pos = 10
|
|
623
|
+
rv.pz = pz
|
|
624
|
+
end
|
|
625
|
+
return kto[9] == pz ? OK : FALSE
|
|
626
|
+
end
|
|
627
|
+
|
|
628
|
+
m1085(kto, blz, um, rv)
|
|
629
|
+
end
|
|
630
|
+
|
|
631
|
+
# Methode 85a
|
|
632
|
+
def m1085(kto, blz, um, rv)
|
|
633
|
+
if rv
|
|
634
|
+
rv.methode = "85a"
|
|
635
|
+
rv.pz_methode = 1085
|
|
636
|
+
end
|
|
637
|
+
pz = kto[3] * 7 +
|
|
638
|
+
kto[4] * 6 +
|
|
639
|
+
kto[5] * 5 +
|
|
640
|
+
kto[6] * 4 +
|
|
641
|
+
kto[7] * 3 +
|
|
642
|
+
kto[8] * 2
|
|
643
|
+
|
|
644
|
+
pz %= 11
|
|
645
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
646
|
+
# CHECK_PZX10
|
|
647
|
+
if rv
|
|
648
|
+
rv.pz_pos = 10
|
|
649
|
+
rv.pz = pz
|
|
650
|
+
end
|
|
651
|
+
return OK if kto[9] == pz
|
|
652
|
+
return FALSE if um != 0
|
|
653
|
+
|
|
654
|
+
m2085(kto, blz, um, rv)
|
|
655
|
+
end
|
|
656
|
+
|
|
657
|
+
# Methode 85b
|
|
658
|
+
def m2085(kto, blz, um, rv)
|
|
659
|
+
if rv
|
|
660
|
+
rv.methode = "85b"
|
|
661
|
+
rv.pz_methode = 2085
|
|
662
|
+
end
|
|
663
|
+
pz = kto[4] * 6 +
|
|
664
|
+
kto[5] * 5 +
|
|
665
|
+
kto[6] * 4 +
|
|
666
|
+
kto[7] * 3 +
|
|
667
|
+
kto[8] * 2
|
|
668
|
+
|
|
669
|
+
pz %= 11
|
|
670
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
671
|
+
# CHECK_PZX10
|
|
672
|
+
if rv
|
|
673
|
+
rv.pz_pos = 10
|
|
674
|
+
rv.pz = pz
|
|
675
|
+
end
|
|
676
|
+
return OK if kto[9] == pz
|
|
677
|
+
return FALSE if um != 0
|
|
678
|
+
|
|
679
|
+
m3085(kto, blz, um, rv)
|
|
680
|
+
end
|
|
681
|
+
|
|
682
|
+
# Methode 85c
|
|
683
|
+
def m3085(kto, blz, um, rv)
|
|
684
|
+
if rv
|
|
685
|
+
rv.methode = "85c"
|
|
686
|
+
rv.pz_methode = 3085
|
|
687
|
+
end
|
|
688
|
+
pz = kto[4] * 6 +
|
|
689
|
+
kto[5] * 5 +
|
|
690
|
+
kto[6] * 4 +
|
|
691
|
+
kto[7] * 3 +
|
|
692
|
+
kto[8] * 2
|
|
693
|
+
|
|
694
|
+
pz %= 7
|
|
695
|
+
pz = 7 - pz if pz != 0
|
|
696
|
+
# CHECK_PZ10
|
|
697
|
+
if rv
|
|
698
|
+
rv.pz_pos = 10
|
|
699
|
+
rv.pz = pz
|
|
700
|
+
end
|
|
701
|
+
kto[9] == pz ? OK : FALSE
|
|
702
|
+
end
|
|
703
|
+
|
|
704
|
+
# Methode 86
|
|
705
|
+
# Varianten A (Modulus 10, Gewichtung 2, 1, 2, 1, 2, 1) und B (Modulus 11,
|
|
706
|
+
# Gewichtung 2..7); Ausnahme: 3. Stelle = 9 (Verfahren 51).
|
|
707
|
+
def m86(kto, blz, um, rv)
|
|
708
|
+
if kto[2] == 9 # Berechnung wie in Verfahren 51
|
|
709
|
+
m3086(kto, blz, um, rv)
|
|
710
|
+
else
|
|
711
|
+
m1086(kto, blz, um, rv)
|
|
712
|
+
end
|
|
713
|
+
end
|
|
714
|
+
|
|
715
|
+
# Methode 86c (Ausnahme, Variante 1)
|
|
716
|
+
def m3086(kto, blz, um, rv)
|
|
717
|
+
if rv
|
|
718
|
+
rv.methode = "86c"
|
|
719
|
+
rv.pz_methode = 3086
|
|
720
|
+
end
|
|
721
|
+
pz = 9 * 8 +
|
|
722
|
+
kto[3] * 7 +
|
|
723
|
+
kto[4] * 6 +
|
|
724
|
+
kto[5] * 5 +
|
|
725
|
+
kto[6] * 4 +
|
|
726
|
+
kto[7] * 3 +
|
|
727
|
+
kto[8] * 2
|
|
728
|
+
|
|
729
|
+
pz %= 11
|
|
730
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
731
|
+
# CHECK_PZX10
|
|
732
|
+
if rv
|
|
733
|
+
rv.pz_pos = 10
|
|
734
|
+
rv.pz = pz
|
|
735
|
+
end
|
|
736
|
+
return OK if kto[9] == pz
|
|
737
|
+
return FALSE if um != 0
|
|
738
|
+
|
|
739
|
+
m4086(kto, blz, um, rv)
|
|
740
|
+
end
|
|
741
|
+
|
|
742
|
+
# Methode 86d (Ausnahme, Variante 2)
|
|
743
|
+
def m4086(kto, blz, um, rv)
|
|
744
|
+
if rv
|
|
745
|
+
rv.methode = "86d"
|
|
746
|
+
rv.pz_methode = 4086
|
|
747
|
+
end
|
|
748
|
+
pz = kto[0] * 10 +
|
|
749
|
+
kto[1] * 9 +
|
|
750
|
+
9 * 8 +
|
|
751
|
+
kto[3] * 7 +
|
|
752
|
+
kto[4] * 6 +
|
|
753
|
+
kto[5] * 5 +
|
|
754
|
+
kto[6] * 4 +
|
|
755
|
+
kto[7] * 3 +
|
|
756
|
+
kto[8] * 2
|
|
757
|
+
|
|
758
|
+
pz %= 11
|
|
759
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
760
|
+
# CHECK_PZ10
|
|
761
|
+
if rv
|
|
762
|
+
rv.pz_pos = 10
|
|
763
|
+
rv.pz = pz
|
|
764
|
+
end
|
|
765
|
+
kto[9] == pz ? OK : FALSE
|
|
766
|
+
end
|
|
767
|
+
|
|
768
|
+
# Methode 86a
|
|
769
|
+
def m1086(kto, blz, um, rv)
|
|
770
|
+
if rv
|
|
771
|
+
rv.methode = "86a"
|
|
772
|
+
rv.pz_methode = 1086
|
|
773
|
+
end
|
|
774
|
+
pz = kto[3] + kto[5] + kto[7]
|
|
775
|
+
pz += kto[4] < 5 ? kto[4] * 2 : kto[4] * 2 - 9
|
|
776
|
+
pz += kto[6] < 5 ? kto[6] * 2 : kto[6] * 2 - 9
|
|
777
|
+
pz += kto[8] < 5 ? kto[8] * 2 : kto[8] * 2 - 9
|
|
778
|
+
|
|
779
|
+
pz %= 10
|
|
780
|
+
pz = 10 - pz if pz != 0
|
|
781
|
+
# CHECK_PZX10
|
|
782
|
+
if rv
|
|
783
|
+
rv.pz_pos = 10
|
|
784
|
+
rv.pz = pz
|
|
785
|
+
end
|
|
786
|
+
return OK if kto[9] == pz
|
|
787
|
+
return FALSE if um != 0
|
|
788
|
+
|
|
789
|
+
m2086(kto, blz, um, rv)
|
|
790
|
+
end
|
|
791
|
+
|
|
792
|
+
# Methode 86b
|
|
793
|
+
def m2086(kto, blz, um, rv)
|
|
794
|
+
if rv
|
|
795
|
+
rv.methode = "86b"
|
|
796
|
+
rv.pz_methode = 2086
|
|
797
|
+
end
|
|
798
|
+
pz = kto[3] * 7 +
|
|
799
|
+
kto[4] * 6 +
|
|
800
|
+
kto[5] * 5 +
|
|
801
|
+
kto[6] * 4 +
|
|
802
|
+
kto[7] * 3 +
|
|
803
|
+
kto[8] * 2
|
|
804
|
+
|
|
805
|
+
pz %= 11
|
|
806
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
807
|
+
# CHECK_PZ10
|
|
808
|
+
if rv
|
|
809
|
+
rv.pz_pos = 10
|
|
810
|
+
rv.pz = pz
|
|
811
|
+
end
|
|
812
|
+
kto[9] == pz ? OK : FALSE
|
|
813
|
+
end
|
|
814
|
+
|
|
815
|
+
# Methode 87
|
|
816
|
+
# Variante A: eigenes Verfahren mit den Tabellen tab1/tab2, Variante B:
|
|
817
|
+
# Verfahren 33, Variante C: Verfahren 84 Variante 2, Variante D:
|
|
818
|
+
# Modulus 11 mit Gewichtung 2..7; Ausnahme: 3. Stelle = 9 (Verfahren 51).
|
|
819
|
+
def m87(kto, blz, um, rv)
|
|
820
|
+
if kto[2] == 9 # Berechnung wie in Verfahren 51
|
|
821
|
+
m5087(kto, blz, um, rv)
|
|
822
|
+
else
|
|
823
|
+
m1087(kto, blz, um, rv)
|
|
824
|
+
end
|
|
825
|
+
end
|
|
826
|
+
|
|
827
|
+
# Methode 87e (Ausnahme, Variante 1)
|
|
828
|
+
def m5087(kto, blz, um, rv)
|
|
829
|
+
if rv
|
|
830
|
+
rv.methode = "87e"
|
|
831
|
+
rv.pz_methode = 5087
|
|
832
|
+
end
|
|
833
|
+
pz = 9 * 8 +
|
|
834
|
+
kto[3] * 7 +
|
|
835
|
+
kto[4] * 6 +
|
|
836
|
+
kto[5] * 5 +
|
|
837
|
+
kto[6] * 4 +
|
|
838
|
+
kto[7] * 3 +
|
|
839
|
+
kto[8] * 2
|
|
840
|
+
|
|
841
|
+
pz %= 11
|
|
842
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
843
|
+
# CHECK_PZX10
|
|
844
|
+
if rv
|
|
845
|
+
rv.pz_pos = 10
|
|
846
|
+
rv.pz = pz
|
|
847
|
+
end
|
|
848
|
+
return OK if kto[9] == pz
|
|
849
|
+
return FALSE if um != 0
|
|
850
|
+
|
|
851
|
+
m6087(kto, blz, um, rv)
|
|
852
|
+
end
|
|
853
|
+
|
|
854
|
+
# Methode 87f (Ausnahme, Variante 2)
|
|
855
|
+
def m6087(kto, blz, um, rv)
|
|
856
|
+
if rv
|
|
857
|
+
rv.methode = "87f"
|
|
858
|
+
rv.pz_methode = 6087
|
|
859
|
+
end
|
|
860
|
+
pz = kto[0] * 10 +
|
|
861
|
+
kto[1] * 9 +
|
|
862
|
+
9 * 8 +
|
|
863
|
+
kto[3] * 7 +
|
|
864
|
+
kto[4] * 6 +
|
|
865
|
+
kto[5] * 5 +
|
|
866
|
+
kto[6] * 4 +
|
|
867
|
+
kto[7] * 3 +
|
|
868
|
+
kto[8] * 2
|
|
869
|
+
|
|
870
|
+
pz %= 11
|
|
871
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
872
|
+
# CHECK_PZ10
|
|
873
|
+
if rv
|
|
874
|
+
rv.pz_pos = 10
|
|
875
|
+
rv.pz = pz
|
|
876
|
+
end
|
|
877
|
+
kto[9] == pz ? OK : FALSE
|
|
878
|
+
end
|
|
879
|
+
|
|
880
|
+
# Methode 87a
|
|
881
|
+
# Der Startindex fuer das Array konto[] ist 1, nicht 0; daher hat es 11
|
|
882
|
+
# Elemente. Die Tabellen tab1/tab2 haben dagegen den Startindex 0.
|
|
883
|
+
def m1087(kto, blz, um, rv)
|
|
884
|
+
if rv
|
|
885
|
+
rv.methode = "87a"
|
|
886
|
+
rv.pz_methode = 1087
|
|
887
|
+
end
|
|
888
|
+
|
|
889
|
+
konto = Array.new(12)
|
|
890
|
+
i = 1
|
|
891
|
+
while i < 11
|
|
892
|
+
konto[i] = kto[i - 1]
|
|
893
|
+
i += 1
|
|
894
|
+
end
|
|
895
|
+
i = 4
|
|
896
|
+
i += 1 while konto[i] == 0
|
|
897
|
+
c2 = i % 2
|
|
898
|
+
d2 = 0
|
|
899
|
+
a5 = 0
|
|
900
|
+
|
|
901
|
+
while i < 10
|
|
902
|
+
case konto[i]
|
|
903
|
+
when 0 then konto[i] = 5
|
|
904
|
+
when 1 then konto[i] = 6
|
|
905
|
+
when 5 then konto[i] = 10
|
|
906
|
+
when 6 then konto[i] = 1
|
|
907
|
+
end
|
|
908
|
+
|
|
909
|
+
if c2 == d2
|
|
910
|
+
if konto[i] > 5
|
|
911
|
+
if c2 == 0 && d2 == 0
|
|
912
|
+
c2 = d2 = 1
|
|
913
|
+
a5 = a5 + 6 - (konto[i] - 6)
|
|
914
|
+
else
|
|
915
|
+
c2 = d2 = 0
|
|
916
|
+
a5 = a5 + konto[i]
|
|
917
|
+
end
|
|
918
|
+
else
|
|
919
|
+
if c2 == 0 && d2 == 0
|
|
920
|
+
c2 = 1
|
|
921
|
+
a5 = a5 + konto[i]
|
|
922
|
+
else
|
|
923
|
+
c2 = 0
|
|
924
|
+
a5 = a5 + konto[i]
|
|
925
|
+
end
|
|
926
|
+
end
|
|
927
|
+
else
|
|
928
|
+
if konto[i] > 5
|
|
929
|
+
if c2 == 0
|
|
930
|
+
c2 = 1
|
|
931
|
+
d2 = 0
|
|
932
|
+
a5 = a5 - 6 + (konto[i] - 6)
|
|
933
|
+
else
|
|
934
|
+
c2 = 0
|
|
935
|
+
d2 = 1
|
|
936
|
+
a5 = a5 - konto[i]
|
|
937
|
+
end
|
|
938
|
+
else
|
|
939
|
+
if c2 == 0
|
|
940
|
+
c2 = 1
|
|
941
|
+
a5 = a5 - konto[i]
|
|
942
|
+
else
|
|
943
|
+
c2 = 0
|
|
944
|
+
a5 = a5 - konto[i]
|
|
945
|
+
end
|
|
946
|
+
end
|
|
947
|
+
end
|
|
948
|
+
i += 1
|
|
949
|
+
end
|
|
950
|
+
|
|
951
|
+
while a5 < 0 || a5 > 4
|
|
952
|
+
if a5 > 4
|
|
953
|
+
a5 -= 5
|
|
954
|
+
else
|
|
955
|
+
a5 += 5
|
|
956
|
+
end
|
|
957
|
+
end
|
|
958
|
+
p = d2 == 0 ? TAB1[a5] : TAB2[a5]
|
|
959
|
+
if p == konto[10]
|
|
960
|
+
return OK # Pruefziffer ok
|
|
961
|
+
else
|
|
962
|
+
if konto[4] == 0
|
|
963
|
+
p = p > 4 ? p - 5 : p + 5
|
|
964
|
+
return OK if p == konto[10] # Pruefziffer ok
|
|
965
|
+
end
|
|
966
|
+
end
|
|
967
|
+
|
|
968
|
+
m2087(kto, blz, um, rv)
|
|
969
|
+
end
|
|
970
|
+
|
|
971
|
+
# Methode 87b (Verfahren 33)
|
|
972
|
+
def m2087(kto, blz, um, rv)
|
|
973
|
+
if rv
|
|
974
|
+
rv.methode = "87b"
|
|
975
|
+
rv.pz_methode = 2087
|
|
976
|
+
end
|
|
977
|
+
pz = kto[4] * 6 +
|
|
978
|
+
kto[5] * 5 +
|
|
979
|
+
kto[6] * 4 +
|
|
980
|
+
kto[7] * 3 +
|
|
981
|
+
kto[8] * 2
|
|
982
|
+
|
|
983
|
+
pz %= 11
|
|
984
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
985
|
+
# CHECK_PZX10
|
|
986
|
+
if rv
|
|
987
|
+
rv.pz_pos = 10
|
|
988
|
+
rv.pz = pz
|
|
989
|
+
end
|
|
990
|
+
return OK if kto[9] == pz
|
|
991
|
+
return FALSE if um != 0
|
|
992
|
+
|
|
993
|
+
m3087(kto, blz, um, rv)
|
|
994
|
+
end
|
|
995
|
+
|
|
996
|
+
# Methode 87c (Verfahren 84 Variante 2)
|
|
997
|
+
def m3087(kto, blz, um, rv)
|
|
998
|
+
if rv
|
|
999
|
+
rv.methode = "87c"
|
|
1000
|
+
rv.pz_methode = 3087
|
|
1001
|
+
end
|
|
1002
|
+
pz = kto[4] * 6 +
|
|
1003
|
+
kto[5] * 5 +
|
|
1004
|
+
kto[6] * 4 +
|
|
1005
|
+
kto[7] * 3 +
|
|
1006
|
+
kto[8] * 2
|
|
1007
|
+
|
|
1008
|
+
pz %= 7
|
|
1009
|
+
pz = 7 - pz if pz != 0
|
|
1010
|
+
# kein CHECK_PZX10: es wird auch bei gesetzter Untermethode weiter
|
|
1011
|
+
# zur Methode 87d gegangen
|
|
1012
|
+
if rv
|
|
1013
|
+
rv.pz = pz
|
|
1014
|
+
rv.pz_pos = 10
|
|
1015
|
+
end
|
|
1016
|
+
return OK if pz == kto[9]
|
|
1017
|
+
|
|
1018
|
+
m4087(kto, blz, um, rv)
|
|
1019
|
+
end
|
|
1020
|
+
|
|
1021
|
+
# Methode 87d
|
|
1022
|
+
def m4087(kto, blz, um, rv)
|
|
1023
|
+
if rv
|
|
1024
|
+
rv.methode = "87d"
|
|
1025
|
+
rv.pz_methode = 4087
|
|
1026
|
+
end
|
|
1027
|
+
pz = kto[3] * 7 +
|
|
1028
|
+
kto[4] * 6 +
|
|
1029
|
+
kto[5] * 5 +
|
|
1030
|
+
kto[6] * 4 +
|
|
1031
|
+
kto[7] * 3 +
|
|
1032
|
+
kto[8] * 2
|
|
1033
|
+
|
|
1034
|
+
pz %= 11
|
|
1035
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1036
|
+
# CHECK_PZ10
|
|
1037
|
+
if rv
|
|
1038
|
+
rv.pz_pos = 10
|
|
1039
|
+
rv.pz = pz
|
|
1040
|
+
end
|
|
1041
|
+
kto[9] == pz ? OK : FALSE
|
|
1042
|
+
end
|
|
1043
|
+
|
|
1044
|
+
# Methode 88
|
|
1045
|
+
# Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7; Ausnahme: 3. Stelle = 9, dann
|
|
1046
|
+
# wird die 3. Stelle mit dem Gewicht 8 mitgerechnet.
|
|
1047
|
+
def m88(kto, blz, um, rv)
|
|
1048
|
+
if rv
|
|
1049
|
+
rv.methode = "88"
|
|
1050
|
+
rv.pz_methode = 88
|
|
1051
|
+
end
|
|
1052
|
+
pz = kto[3] * 7 +
|
|
1053
|
+
kto[4] * 6 +
|
|
1054
|
+
kto[5] * 5 +
|
|
1055
|
+
kto[6] * 4 +
|
|
1056
|
+
kto[7] * 3 +
|
|
1057
|
+
kto[8] * 2
|
|
1058
|
+
pz += 9 * 8 if kto[2] == 9 # Ausnahme
|
|
1059
|
+
|
|
1060
|
+
pz %= 11
|
|
1061
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1062
|
+
# CHECK_PZ10
|
|
1063
|
+
if rv
|
|
1064
|
+
rv.pz_pos = 10
|
|
1065
|
+
rv.pz = pz
|
|
1066
|
+
end
|
|
1067
|
+
kto[9] == pz ? OK : FALSE
|
|
1068
|
+
end
|
|
1069
|
+
|
|
1070
|
+
# Methode 89
|
|
1071
|
+
# 8- und 9-stellige Kontonummern: Verfahren 10; 7-stellige Kontonummern:
|
|
1072
|
+
# Modulus 11 mit Quersummenbildung; sonst keine Pruefzifferberechnung.
|
|
1073
|
+
def m89(kto, blz, um, rv)
|
|
1074
|
+
m1089(kto, blz, um, rv)
|
|
1075
|
+
end
|
|
1076
|
+
|
|
1077
|
+
# Methode 89a (8- und 9-stellige Kontonummern)
|
|
1078
|
+
def m1089(kto, blz, um, rv)
|
|
1079
|
+
if rv
|
|
1080
|
+
rv.methode = "89a"
|
|
1081
|
+
rv.pz_methode = 1089
|
|
1082
|
+
end
|
|
1083
|
+
if kto[0] == 0 && (kto[1] != 0 || kto[2] != 0)
|
|
1084
|
+
pz = kto[1] * 9 +
|
|
1085
|
+
kto[2] * 8 +
|
|
1086
|
+
kto[3] * 7 +
|
|
1087
|
+
kto[4] * 6 +
|
|
1088
|
+
kto[5] * 5 +
|
|
1089
|
+
kto[6] * 4 +
|
|
1090
|
+
kto[7] * 3 +
|
|
1091
|
+
kto[8] * 2
|
|
1092
|
+
|
|
1093
|
+
pz %= 11
|
|
1094
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1095
|
+
# CHECK_PZ10
|
|
1096
|
+
if rv
|
|
1097
|
+
rv.pz_pos = 10
|
|
1098
|
+
rv.pz = pz
|
|
1099
|
+
end
|
|
1100
|
+
return kto[9] == pz ? OK : FALSE
|
|
1101
|
+
end
|
|
1102
|
+
|
|
1103
|
+
m2089(kto, blz, um, rv)
|
|
1104
|
+
end
|
|
1105
|
+
|
|
1106
|
+
# Methode 89b (7-stellige Kontonummern)
|
|
1107
|
+
def m2089(kto, blz, um, rv)
|
|
1108
|
+
if rv
|
|
1109
|
+
rv.methode = "89b"
|
|
1110
|
+
rv.pz_methode = 2089
|
|
1111
|
+
end
|
|
1112
|
+
if kto[0] == 0 && kto[1] == 0 && kto[2] == 0 && kto[3] != 0
|
|
1113
|
+
pz = kto[3] * 7
|
|
1114
|
+
if pz >= 40
|
|
1115
|
+
if pz >= 50
|
|
1116
|
+
if pz >= 60
|
|
1117
|
+
pz -= 54
|
|
1118
|
+
else
|
|
1119
|
+
pz -= 45
|
|
1120
|
+
end
|
|
1121
|
+
else
|
|
1122
|
+
pz -= 36
|
|
1123
|
+
end
|
|
1124
|
+
elsif pz >= 20
|
|
1125
|
+
if pz >= 30
|
|
1126
|
+
pz -= 27
|
|
1127
|
+
else
|
|
1128
|
+
pz -= 18
|
|
1129
|
+
end
|
|
1130
|
+
elsif pz >= 10
|
|
1131
|
+
pz -= 9
|
|
1132
|
+
end
|
|
1133
|
+
|
|
1134
|
+
p1 = kto[4] * 6
|
|
1135
|
+
if p1 >= 40
|
|
1136
|
+
if p1 >= 50
|
|
1137
|
+
p1 -= 45
|
|
1138
|
+
else
|
|
1139
|
+
p1 -= 36
|
|
1140
|
+
end
|
|
1141
|
+
elsif p1 >= 20
|
|
1142
|
+
if p1 >= 30
|
|
1143
|
+
p1 -= 27
|
|
1144
|
+
else
|
|
1145
|
+
p1 -= 18
|
|
1146
|
+
end
|
|
1147
|
+
elsif p1 >= 10
|
|
1148
|
+
p1 -= 9
|
|
1149
|
+
end
|
|
1150
|
+
pz += p1
|
|
1151
|
+
|
|
1152
|
+
p1 = kto[5] * 5
|
|
1153
|
+
if p1 >= 40
|
|
1154
|
+
p1 -= 36
|
|
1155
|
+
elsif p1 >= 20
|
|
1156
|
+
if p1 >= 30
|
|
1157
|
+
p1 -= 27
|
|
1158
|
+
else
|
|
1159
|
+
p1 -= 18
|
|
1160
|
+
end
|
|
1161
|
+
elsif p1 >= 10
|
|
1162
|
+
p1 -= 9
|
|
1163
|
+
end
|
|
1164
|
+
pz += p1
|
|
1165
|
+
|
|
1166
|
+
p1 = kto[6] * 4
|
|
1167
|
+
if p1 >= 20
|
|
1168
|
+
if p1 >= 30
|
|
1169
|
+
p1 -= 27
|
|
1170
|
+
else
|
|
1171
|
+
p1 -= 18
|
|
1172
|
+
end
|
|
1173
|
+
elsif p1 >= 10
|
|
1174
|
+
p1 -= 9
|
|
1175
|
+
end
|
|
1176
|
+
pz += p1
|
|
1177
|
+
|
|
1178
|
+
p1 = kto[7] * 3
|
|
1179
|
+
if p1 >= 20
|
|
1180
|
+
p1 -= 18
|
|
1181
|
+
elsif p1 >= 10
|
|
1182
|
+
p1 -= 9
|
|
1183
|
+
end
|
|
1184
|
+
pz += p1
|
|
1185
|
+
|
|
1186
|
+
p1 = kto[8] * 2
|
|
1187
|
+
p1 -= 9 if p1 >= 10
|
|
1188
|
+
pz += p1
|
|
1189
|
+
|
|
1190
|
+
pz %= 11
|
|
1191
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1192
|
+
# CHECK_PZ10
|
|
1193
|
+
if rv
|
|
1194
|
+
rv.pz_pos = 10
|
|
1195
|
+
rv.pz = pz
|
|
1196
|
+
end
|
|
1197
|
+
return kto[9] == pz ? OK : FALSE
|
|
1198
|
+
end
|
|
1199
|
+
|
|
1200
|
+
m3089(kto, blz, um, rv)
|
|
1201
|
+
end
|
|
1202
|
+
|
|
1203
|
+
# Methode 89c (1- bis 6- und 10-stellige Kontonummern)
|
|
1204
|
+
def m3089(kto, blz, um, rv)
|
|
1205
|
+
if rv
|
|
1206
|
+
rv.methode = "89c"
|
|
1207
|
+
rv.pz_methode = 3089
|
|
1208
|
+
end
|
|
1209
|
+
OK_NO_CHK
|
|
1210
|
+
end
|
|
1211
|
+
|
|
1212
|
+
# Methode 90
|
|
1213
|
+
# Varianten A bis E und G; Sachkonten (3. Stelle = 9) mit Variante F.
|
|
1214
|
+
def m90(kto, blz, um, rv)
|
|
1215
|
+
if kto[2] == 9 # Sachkonto
|
|
1216
|
+
m6090(kto, blz, um, rv)
|
|
1217
|
+
else
|
|
1218
|
+
m1090(kto, blz, um, rv)
|
|
1219
|
+
end
|
|
1220
|
+
end
|
|
1221
|
+
|
|
1222
|
+
# Methode 90f (Sachkonto)
|
|
1223
|
+
def m6090(kto, blz, um, rv)
|
|
1224
|
+
if rv
|
|
1225
|
+
rv.methode = "90f"
|
|
1226
|
+
rv.pz_methode = 6090
|
|
1227
|
+
end
|
|
1228
|
+
pz = 9 * 8 +
|
|
1229
|
+
kto[3] * 7 +
|
|
1230
|
+
kto[4] * 6 +
|
|
1231
|
+
kto[5] * 5 +
|
|
1232
|
+
kto[6] * 4 +
|
|
1233
|
+
kto[7] * 3 +
|
|
1234
|
+
kto[8] * 2
|
|
1235
|
+
|
|
1236
|
+
pz %= 11
|
|
1237
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1238
|
+
# CHECK_PZ10
|
|
1239
|
+
if rv
|
|
1240
|
+
rv.pz_pos = 10
|
|
1241
|
+
rv.pz = pz
|
|
1242
|
+
end
|
|
1243
|
+
kto[9] == pz ? OK : FALSE
|
|
1244
|
+
end
|
|
1245
|
+
|
|
1246
|
+
# Methode 90a
|
|
1247
|
+
def m1090(kto, blz, um, rv)
|
|
1248
|
+
if rv
|
|
1249
|
+
rv.methode = "90a"
|
|
1250
|
+
rv.pz_methode = 1090
|
|
1251
|
+
end
|
|
1252
|
+
pz = kto[3] * 7 +
|
|
1253
|
+
kto[4] * 6 +
|
|
1254
|
+
kto[5] * 5 +
|
|
1255
|
+
kto[6] * 4 +
|
|
1256
|
+
kto[7] * 3 +
|
|
1257
|
+
kto[8] * 2
|
|
1258
|
+
|
|
1259
|
+
pz %= 11
|
|
1260
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1261
|
+
# CHECK_PZX10
|
|
1262
|
+
if rv
|
|
1263
|
+
rv.pz_pos = 10
|
|
1264
|
+
rv.pz = pz
|
|
1265
|
+
end
|
|
1266
|
+
return OK if kto[9] == pz
|
|
1267
|
+
return FALSE if um != 0
|
|
1268
|
+
|
|
1269
|
+
m2090(kto, blz, um, rv)
|
|
1270
|
+
end
|
|
1271
|
+
|
|
1272
|
+
# Methode 90b
|
|
1273
|
+
def m2090(kto, blz, um, rv)
|
|
1274
|
+
if rv
|
|
1275
|
+
rv.methode = "90b"
|
|
1276
|
+
rv.pz_methode = 2090
|
|
1277
|
+
end
|
|
1278
|
+
pz = kto[4] * 6 +
|
|
1279
|
+
kto[5] * 5 +
|
|
1280
|
+
kto[6] * 4 +
|
|
1281
|
+
kto[7] * 3 +
|
|
1282
|
+
kto[8] * 2
|
|
1283
|
+
|
|
1284
|
+
pz %= 11
|
|
1285
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1286
|
+
# CHECK_PZX10
|
|
1287
|
+
if rv
|
|
1288
|
+
rv.pz_pos = 10
|
|
1289
|
+
rv.pz = pz
|
|
1290
|
+
end
|
|
1291
|
+
return OK if kto[9] == pz
|
|
1292
|
+
return FALSE if um != 0
|
|
1293
|
+
|
|
1294
|
+
m3090(kto, blz, um, rv)
|
|
1295
|
+
end
|
|
1296
|
+
|
|
1297
|
+
# Methode 90c
|
|
1298
|
+
def m3090(kto, blz, um, rv)
|
|
1299
|
+
if rv
|
|
1300
|
+
rv.methode = "90c"
|
|
1301
|
+
rv.pz_methode = 3090
|
|
1302
|
+
end
|
|
1303
|
+
pz = kto[4] * 6 +
|
|
1304
|
+
kto[5] * 5 +
|
|
1305
|
+
kto[6] * 4 +
|
|
1306
|
+
kto[7] * 3 +
|
|
1307
|
+
kto[8] * 2
|
|
1308
|
+
|
|
1309
|
+
pz %= 7
|
|
1310
|
+
pz = 7 - pz if pz != 0
|
|
1311
|
+
# CHECK_PZX10
|
|
1312
|
+
if rv
|
|
1313
|
+
rv.pz_pos = 10
|
|
1314
|
+
rv.pz = pz
|
|
1315
|
+
end
|
|
1316
|
+
return OK if kto[9] == pz
|
|
1317
|
+
return FALSE if um != 0
|
|
1318
|
+
|
|
1319
|
+
m4090(kto, blz, um, rv)
|
|
1320
|
+
end
|
|
1321
|
+
|
|
1322
|
+
# Methode 90d
|
|
1323
|
+
def m4090(kto, blz, um, rv)
|
|
1324
|
+
if rv
|
|
1325
|
+
rv.methode = "90d"
|
|
1326
|
+
rv.pz_methode = 4090
|
|
1327
|
+
end
|
|
1328
|
+
pz = kto[4] * 6 +
|
|
1329
|
+
kto[5] * 5 +
|
|
1330
|
+
kto[6] * 4 +
|
|
1331
|
+
kto[7] * 3 +
|
|
1332
|
+
kto[8] * 2
|
|
1333
|
+
|
|
1334
|
+
pz %= 9
|
|
1335
|
+
pz = 9 - pz if pz != 0
|
|
1336
|
+
# CHECK_PZX10
|
|
1337
|
+
if rv
|
|
1338
|
+
rv.pz_pos = 10
|
|
1339
|
+
rv.pz = pz
|
|
1340
|
+
end
|
|
1341
|
+
return OK if kto[9] == pz
|
|
1342
|
+
return FALSE if um != 0
|
|
1343
|
+
|
|
1344
|
+
m5090(kto, blz, um, rv)
|
|
1345
|
+
end
|
|
1346
|
+
|
|
1347
|
+
# Methode 90e
|
|
1348
|
+
def m5090(kto, blz, um, rv)
|
|
1349
|
+
if rv
|
|
1350
|
+
rv.methode = "90e"
|
|
1351
|
+
rv.pz_methode = 5090
|
|
1352
|
+
end
|
|
1353
|
+
pz = kto[4] * 2 +
|
|
1354
|
+
kto[5] +
|
|
1355
|
+
kto[6] * 2 +
|
|
1356
|
+
kto[7] +
|
|
1357
|
+
kto[8] * 2
|
|
1358
|
+
|
|
1359
|
+
pz %= 10
|
|
1360
|
+
pz = 10 - pz if pz != 0
|
|
1361
|
+
# CHECK_PZX10
|
|
1362
|
+
if rv
|
|
1363
|
+
rv.pz_pos = 10
|
|
1364
|
+
rv.pz = pz
|
|
1365
|
+
end
|
|
1366
|
+
return OK if kto[9] == pz
|
|
1367
|
+
return FALSE if um != 0
|
|
1368
|
+
|
|
1369
|
+
m7090(kto, blz, um, rv)
|
|
1370
|
+
end
|
|
1371
|
+
|
|
1372
|
+
# Methode 90g
|
|
1373
|
+
def m7090(kto, blz, um, rv)
|
|
1374
|
+
if rv
|
|
1375
|
+
rv.methode = "90g"
|
|
1376
|
+
rv.pz_methode = 7090
|
|
1377
|
+
end
|
|
1378
|
+
pz = kto[3] +
|
|
1379
|
+
kto[4] * 2 +
|
|
1380
|
+
kto[5] +
|
|
1381
|
+
kto[6] * 2 +
|
|
1382
|
+
kto[7] +
|
|
1383
|
+
kto[8] * 2
|
|
1384
|
+
|
|
1385
|
+
pz %= 7
|
|
1386
|
+
pz = 7 - pz if pz != 0
|
|
1387
|
+
# CHECK_PZ10
|
|
1388
|
+
if rv
|
|
1389
|
+
rv.pz_pos = 10
|
|
1390
|
+
rv.pz = pz
|
|
1391
|
+
end
|
|
1392
|
+
kto[9] == pz ? OK : FALSE
|
|
1393
|
+
end
|
|
1394
|
+
|
|
1395
|
+
# Methode 91
|
|
1396
|
+
# Pruefziffer an Stelle 7; Varianten A bis D mit unterschiedlichen
|
|
1397
|
+
# Gewichtungen, alle Modulus 11.
|
|
1398
|
+
def m91(kto, blz, um, rv)
|
|
1399
|
+
m1091(kto, blz, um, rv)
|
|
1400
|
+
end
|
|
1401
|
+
|
|
1402
|
+
# Methode 91a
|
|
1403
|
+
def m1091(kto, blz, um, rv)
|
|
1404
|
+
if rv
|
|
1405
|
+
rv.methode = "91a"
|
|
1406
|
+
rv.pz_methode = 1091
|
|
1407
|
+
end
|
|
1408
|
+
pz = kto[0] * 7 +
|
|
1409
|
+
kto[1] * 6 +
|
|
1410
|
+
kto[2] * 5 +
|
|
1411
|
+
kto[3] * 4 +
|
|
1412
|
+
kto[4] * 3 +
|
|
1413
|
+
kto[5] * 2
|
|
1414
|
+
|
|
1415
|
+
pz %= 11
|
|
1416
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1417
|
+
# CHECK_PZX7
|
|
1418
|
+
if rv
|
|
1419
|
+
rv.pz_pos = 7
|
|
1420
|
+
rv.pz = pz
|
|
1421
|
+
end
|
|
1422
|
+
return OK if kto[6] == pz
|
|
1423
|
+
return FALSE if um != 0
|
|
1424
|
+
|
|
1425
|
+
m2091(kto, blz, um, rv)
|
|
1426
|
+
end
|
|
1427
|
+
|
|
1428
|
+
# Methode 91b
|
|
1429
|
+
def m2091(kto, blz, um, rv)
|
|
1430
|
+
if rv
|
|
1431
|
+
rv.methode = "91b"
|
|
1432
|
+
rv.pz_methode = 2091
|
|
1433
|
+
end
|
|
1434
|
+
pz = kto[0] * 2 +
|
|
1435
|
+
kto[1] * 3 +
|
|
1436
|
+
kto[2] * 4 +
|
|
1437
|
+
kto[3] * 5 +
|
|
1438
|
+
kto[4] * 6 +
|
|
1439
|
+
kto[5] * 7
|
|
1440
|
+
|
|
1441
|
+
pz %= 11
|
|
1442
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1443
|
+
# CHECK_PZX7
|
|
1444
|
+
if rv
|
|
1445
|
+
rv.pz_pos = 7
|
|
1446
|
+
rv.pz = pz
|
|
1447
|
+
end
|
|
1448
|
+
return OK if kto[6] == pz
|
|
1449
|
+
return FALSE if um != 0
|
|
1450
|
+
|
|
1451
|
+
m3091(kto, blz, um, rv)
|
|
1452
|
+
end
|
|
1453
|
+
|
|
1454
|
+
# Methode 91c
|
|
1455
|
+
def m3091(kto, blz, um, rv)
|
|
1456
|
+
if rv
|
|
1457
|
+
rv.methode = "91c"
|
|
1458
|
+
rv.pz_methode = 3091
|
|
1459
|
+
end
|
|
1460
|
+
pz = kto[0] * 10 +
|
|
1461
|
+
kto[1] * 9 +
|
|
1462
|
+
kto[2] * 8 +
|
|
1463
|
+
kto[3] * 7 +
|
|
1464
|
+
kto[4] * 6 +
|
|
1465
|
+
kto[5] * 5 +
|
|
1466
|
+
kto[7] * 4 +
|
|
1467
|
+
kto[8] * 3 +
|
|
1468
|
+
kto[9] * 2
|
|
1469
|
+
|
|
1470
|
+
pz %= 11
|
|
1471
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1472
|
+
# CHECK_PZX7
|
|
1473
|
+
if rv
|
|
1474
|
+
rv.pz_pos = 7
|
|
1475
|
+
rv.pz = pz
|
|
1476
|
+
end
|
|
1477
|
+
return OK if kto[6] == pz
|
|
1478
|
+
return FALSE if um != 0
|
|
1479
|
+
|
|
1480
|
+
m4091(kto, blz, um, rv)
|
|
1481
|
+
end
|
|
1482
|
+
|
|
1483
|
+
# Methode 91d
|
|
1484
|
+
def m4091(kto, blz, um, rv)
|
|
1485
|
+
if rv
|
|
1486
|
+
rv.methode = "91d"
|
|
1487
|
+
rv.pz_methode = 4091
|
|
1488
|
+
end
|
|
1489
|
+
pz = kto[0] * 9 +
|
|
1490
|
+
kto[1] * 10 +
|
|
1491
|
+
kto[2] * 5 +
|
|
1492
|
+
kto[3] * 8 +
|
|
1493
|
+
kto[4] * 4 +
|
|
1494
|
+
kto[5] * 2
|
|
1495
|
+
|
|
1496
|
+
pz %= 11
|
|
1497
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1498
|
+
# CHECK_PZ7
|
|
1499
|
+
if rv
|
|
1500
|
+
rv.pz_pos = 7
|
|
1501
|
+
rv.pz = pz
|
|
1502
|
+
end
|
|
1503
|
+
kto[6] == pz ? OK : FALSE
|
|
1504
|
+
end
|
|
1505
|
+
|
|
1506
|
+
# Methode 92
|
|
1507
|
+
# Modulus 10, Gewichtung 3, 7, 1, 3, 7, 1.
|
|
1508
|
+
def m92(kto, blz, um, rv)
|
|
1509
|
+
if rv
|
|
1510
|
+
rv.methode = "92"
|
|
1511
|
+
rv.pz_methode = 92
|
|
1512
|
+
end
|
|
1513
|
+
pz = kto[3] +
|
|
1514
|
+
kto[4] * 7 +
|
|
1515
|
+
kto[5] * 3 +
|
|
1516
|
+
kto[6] +
|
|
1517
|
+
kto[7] * 7 +
|
|
1518
|
+
kto[8] * 3
|
|
1519
|
+
|
|
1520
|
+
pz %= 10
|
|
1521
|
+
pz = 10 - pz if pz != 0
|
|
1522
|
+
# CHECK_PZ10
|
|
1523
|
+
if rv
|
|
1524
|
+
rv.pz_pos = 10
|
|
1525
|
+
rv.pz = pz
|
|
1526
|
+
end
|
|
1527
|
+
kto[9] == pz ? OK : FALSE
|
|
1528
|
+
end
|
|
1529
|
+
|
|
1530
|
+
# Methode 93
|
|
1531
|
+
# Modulus 11, Gewichtung 2, 3, 4, 5, 6 (Variante 1) bzw. Modulus 7
|
|
1532
|
+
# (Variante 2); Fall a): Kontonummer 1..5 mit Pruefziffer an Stelle 6,
|
|
1533
|
+
# Fall b): Kontonummer 5..9 mit Pruefziffer an Stelle 10.
|
|
1534
|
+
def m93(kto, blz, um, rv)
|
|
1535
|
+
if kto[0] == 0 && kto[1] == 0 && kto[2] == 0 && kto[3] == 0 # Fall b)
|
|
1536
|
+
m2093(kto, blz, um, rv)
|
|
1537
|
+
else
|
|
1538
|
+
m1093(kto, blz, um, rv)
|
|
1539
|
+
end
|
|
1540
|
+
end
|
|
1541
|
+
|
|
1542
|
+
# Methode 93b (Variante 1, Fall b)
|
|
1543
|
+
def m2093(kto, blz, um, rv)
|
|
1544
|
+
if rv
|
|
1545
|
+
rv.methode = "93b"
|
|
1546
|
+
rv.pz_methode = 2093
|
|
1547
|
+
end
|
|
1548
|
+
pz = kto[4] * 6 +
|
|
1549
|
+
kto[5] * 5 +
|
|
1550
|
+
kto[6] * 4 +
|
|
1551
|
+
kto[7] * 3 +
|
|
1552
|
+
kto[8] * 2
|
|
1553
|
+
|
|
1554
|
+
p1 = pz
|
|
1555
|
+
pz %= 11
|
|
1556
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1557
|
+
# CHECK_PZX10
|
|
1558
|
+
if rv
|
|
1559
|
+
rv.pz_pos = 10
|
|
1560
|
+
rv.pz = pz
|
|
1561
|
+
end
|
|
1562
|
+
return OK if kto[9] == pz
|
|
1563
|
+
return FALSE if um != 0
|
|
1564
|
+
|
|
1565
|
+
# Variante 2 (untermethode == 0, pz wurde bereits berechnet)
|
|
1566
|
+
pz = p1 % 7
|
|
1567
|
+
pz = 7 - pz if pz != 0
|
|
1568
|
+
# CHECK_PZ10
|
|
1569
|
+
if rv
|
|
1570
|
+
rv.pz_pos = 10
|
|
1571
|
+
rv.pz = pz
|
|
1572
|
+
end
|
|
1573
|
+
kto[9] == pz ? OK : FALSE
|
|
1574
|
+
end
|
|
1575
|
+
|
|
1576
|
+
# Methode 93a (Variante 1, Fall a)
|
|
1577
|
+
def m1093(kto, blz, um, rv)
|
|
1578
|
+
if rv
|
|
1579
|
+
rv.methode = "93a"
|
|
1580
|
+
rv.pz_methode = 1093
|
|
1581
|
+
end
|
|
1582
|
+
pz = kto[0] * 6 +
|
|
1583
|
+
kto[1] * 5 +
|
|
1584
|
+
kto[2] * 4 +
|
|
1585
|
+
kto[3] * 3 +
|
|
1586
|
+
kto[4] * 2
|
|
1587
|
+
|
|
1588
|
+
kto[9] = kto[5] # Pruefziffer nach Stelle 10
|
|
1589
|
+
p1 = pz
|
|
1590
|
+
pz %= 11
|
|
1591
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1592
|
+
# CHECK_PZX10
|
|
1593
|
+
if rv
|
|
1594
|
+
rv.pz_pos = 10
|
|
1595
|
+
rv.pz = pz
|
|
1596
|
+
end
|
|
1597
|
+
return OK if kto[9] == pz
|
|
1598
|
+
return FALSE if um != 0
|
|
1599
|
+
|
|
1600
|
+
# Variante 2 (untermethode == 0, pz wurde bereits berechnet)
|
|
1601
|
+
pz = p1 % 7
|
|
1602
|
+
pz = 7 - pz if pz != 0
|
|
1603
|
+
# CHECK_PZ10
|
|
1604
|
+
if rv
|
|
1605
|
+
rv.pz_pos = 10
|
|
1606
|
+
rv.pz = pz
|
|
1607
|
+
end
|
|
1608
|
+
kto[9] == pz ? OK : FALSE
|
|
1609
|
+
end
|
|
1610
|
+
|
|
1611
|
+
# Methode 93d (Variante 2, Fall b)
|
|
1612
|
+
def m4093(kto, blz, um, rv)
|
|
1613
|
+
if rv
|
|
1614
|
+
rv.methode = "93d"
|
|
1615
|
+
rv.pz_methode = 4093
|
|
1616
|
+
end
|
|
1617
|
+
p1 = 0
|
|
1618
|
+
i = 0
|
|
1619
|
+
while i < 5
|
|
1620
|
+
p1 += kto[8 - i] * W93[i]
|
|
1621
|
+
i += 1
|
|
1622
|
+
end
|
|
1623
|
+
|
|
1624
|
+
pz = p1 % 7
|
|
1625
|
+
pz = 7 - pz if pz != 0
|
|
1626
|
+
# CHECK_PZ10
|
|
1627
|
+
if rv
|
|
1628
|
+
rv.pz_pos = 10
|
|
1629
|
+
rv.pz = pz
|
|
1630
|
+
end
|
|
1631
|
+
kto[9] == pz ? OK : FALSE
|
|
1632
|
+
end
|
|
1633
|
+
|
|
1634
|
+
# Methode 93c (Variante 2, Fall a)
|
|
1635
|
+
def m3093(kto, blz, um, rv)
|
|
1636
|
+
if rv
|
|
1637
|
+
rv.methode = "93c"
|
|
1638
|
+
rv.pz_methode = 3093
|
|
1639
|
+
end
|
|
1640
|
+
p1 = 0
|
|
1641
|
+
i = 0
|
|
1642
|
+
while i < 5
|
|
1643
|
+
p1 += kto[4 - i] * W93[i]
|
|
1644
|
+
i += 1
|
|
1645
|
+
end
|
|
1646
|
+
kto[9] = kto[5] # Pruefziffer nach Stelle 10
|
|
1647
|
+
|
|
1648
|
+
pz = p1 % 7
|
|
1649
|
+
pz = 7 - pz if pz != 0
|
|
1650
|
+
# CHECK_PZ10
|
|
1651
|
+
if rv
|
|
1652
|
+
rv.pz_pos = 10
|
|
1653
|
+
rv.pz = pz
|
|
1654
|
+
end
|
|
1655
|
+
kto[9] == pz ? OK : FALSE
|
|
1656
|
+
end
|
|
1657
|
+
|
|
1658
|
+
# Methode 94
|
|
1659
|
+
# Modulus 10, Gewichtung 1, 2, 1, 2, 1, 2, 1, 2, 1.
|
|
1660
|
+
def m94(kto, blz, um, rv)
|
|
1661
|
+
if rv
|
|
1662
|
+
rv.methode = "94"
|
|
1663
|
+
rv.pz_methode = 94
|
|
1664
|
+
end
|
|
1665
|
+
pz = kto[0] + kto[2] + kto[4] + kto[6] + kto[8]
|
|
1666
|
+
pz += kto[1] < 5 ? kto[1] * 2 : kto[1] * 2 - 9
|
|
1667
|
+
pz += kto[3] < 5 ? kto[3] * 2 : kto[3] * 2 - 9
|
|
1668
|
+
pz += kto[5] < 5 ? kto[5] * 2 : kto[5] * 2 - 9
|
|
1669
|
+
pz += kto[7] < 5 ? kto[7] * 2 : kto[7] * 2 - 9
|
|
1670
|
+
|
|
1671
|
+
pz %= 10
|
|
1672
|
+
pz = 10 - pz if pz != 0
|
|
1673
|
+
# CHECK_PZ10
|
|
1674
|
+
if rv
|
|
1675
|
+
rv.pz_pos = 10
|
|
1676
|
+
rv.pz = pz
|
|
1677
|
+
end
|
|
1678
|
+
kto[9] == pz ? OK : FALSE
|
|
1679
|
+
end
|
|
1680
|
+
|
|
1681
|
+
# Methode 95
|
|
1682
|
+
# Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7, 2, 3, 4; fuer bestimmte
|
|
1683
|
+
# Nummernkreise (Sach- und Verrechnungskonten) entfaellt die Pruefung.
|
|
1684
|
+
def m95(kto, blz, um, rv)
|
|
1685
|
+
if rv
|
|
1686
|
+
rv.methode = "95"
|
|
1687
|
+
rv.pz_methode = 95
|
|
1688
|
+
end
|
|
1689
|
+
tmp = kto[0] * 1000 + kto[1] * 100 + kto[2] * 10 + kto[3]
|
|
1690
|
+
# Ausnahmen: keine Pruefzifferberechnung
|
|
1691
|
+
if tmp <= 1 ||
|
|
1692
|
+
(tmp >= 9 && tmp <= 25) ||
|
|
1693
|
+
(tmp >= 396 && tmp <= 499) ||
|
|
1694
|
+
(tmp >= 700 && tmp <= 799) ||
|
|
1695
|
+
(tmp >= 910 && tmp <= 989)
|
|
1696
|
+
return OK_NO_CHK
|
|
1697
|
+
end
|
|
1698
|
+
|
|
1699
|
+
pz = kto[0] * 4 +
|
|
1700
|
+
kto[1] * 3 +
|
|
1701
|
+
kto[2] * 2 +
|
|
1702
|
+
kto[3] * 7 +
|
|
1703
|
+
kto[4] * 6 +
|
|
1704
|
+
kto[5] * 5 +
|
|
1705
|
+
kto[6] * 4 +
|
|
1706
|
+
kto[7] * 3 +
|
|
1707
|
+
kto[8] * 2
|
|
1708
|
+
|
|
1709
|
+
pz %= 11
|
|
1710
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1711
|
+
# CHECK_PZ10
|
|
1712
|
+
if rv
|
|
1713
|
+
rv.pz_pos = 10
|
|
1714
|
+
rv.pz = pz
|
|
1715
|
+
end
|
|
1716
|
+
kto[9] == pz ? OK : FALSE
|
|
1717
|
+
end
|
|
1718
|
+
|
|
1719
|
+
# Methode 96
|
|
1720
|
+
# Variante A: Verfahren 19, Variante B: Verfahren 00; Kontonummern von
|
|
1721
|
+
# 0001300000 bis 0099399999 sind ohne Pruefzifferberechnung gueltig.
|
|
1722
|
+
def m96(kto, blz, um, rv)
|
|
1723
|
+
m3096(kto, blz, um, rv)
|
|
1724
|
+
end
|
|
1725
|
+
|
|
1726
|
+
# Methode 96c (Nummernkreis ohne Pruefzifferberechnung)
|
|
1727
|
+
def m3096(kto, blz, um, rv)
|
|
1728
|
+
if rv
|
|
1729
|
+
rv.methode = "96c"
|
|
1730
|
+
rv.pz_methode = 3096
|
|
1731
|
+
end
|
|
1732
|
+
# die Berechnung muss in diesem Fall nicht gemacht werden
|
|
1733
|
+
s = kto.join
|
|
1734
|
+
return OK_NO_CHK if s >= "0001300000" && s < "0099400000"
|
|
1735
|
+
|
|
1736
|
+
m1096(kto, blz, um, rv)
|
|
1737
|
+
end
|
|
1738
|
+
|
|
1739
|
+
# Methode 96a (Verfahren 19)
|
|
1740
|
+
def m1096(kto, blz, um, rv)
|
|
1741
|
+
if rv
|
|
1742
|
+
rv.methode = "96a"
|
|
1743
|
+
rv.pz_methode = 1096
|
|
1744
|
+
end
|
|
1745
|
+
pz = kto[0] +
|
|
1746
|
+
kto[1] * 9 +
|
|
1747
|
+
kto[2] * 8 +
|
|
1748
|
+
kto[3] * 7 +
|
|
1749
|
+
kto[4] * 6 +
|
|
1750
|
+
kto[5] * 5 +
|
|
1751
|
+
kto[6] * 4 +
|
|
1752
|
+
kto[7] * 3 +
|
|
1753
|
+
kto[8] * 2
|
|
1754
|
+
|
|
1755
|
+
pz %= 11
|
|
1756
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1757
|
+
# CHECK_PZX10
|
|
1758
|
+
if rv
|
|
1759
|
+
rv.pz_pos = 10
|
|
1760
|
+
rv.pz = pz
|
|
1761
|
+
end
|
|
1762
|
+
return OK if kto[9] == pz
|
|
1763
|
+
return FALSE if um != 0
|
|
1764
|
+
|
|
1765
|
+
m2096(kto, blz, um, rv)
|
|
1766
|
+
end
|
|
1767
|
+
|
|
1768
|
+
# Methode 96b (Verfahren 00)
|
|
1769
|
+
def m2096(kto, blz, um, rv)
|
|
1770
|
+
if rv
|
|
1771
|
+
rv.methode = "96b"
|
|
1772
|
+
rv.pz_methode = 2096
|
|
1773
|
+
end
|
|
1774
|
+
pz = kto[1] + kto[3] + kto[5] + kto[7]
|
|
1775
|
+
pz += kto[0] < 5 ? kto[0] * 2 : kto[0] * 2 - 9
|
|
1776
|
+
pz += kto[2] < 5 ? kto[2] * 2 : kto[2] * 2 - 9
|
|
1777
|
+
pz += kto[4] < 5 ? kto[4] * 2 : kto[4] * 2 - 9
|
|
1778
|
+
pz += kto[6] < 5 ? kto[6] * 2 : kto[6] * 2 - 9
|
|
1779
|
+
pz += kto[8] < 5 ? kto[8] * 2 : kto[8] * 2 - 9
|
|
1780
|
+
|
|
1781
|
+
pz %= 10
|
|
1782
|
+
pz = 10 - pz if pz != 0
|
|
1783
|
+
# CHECK_PZ10
|
|
1784
|
+
if rv
|
|
1785
|
+
rv.pz_pos = 10
|
|
1786
|
+
rv.pz = pz
|
|
1787
|
+
end
|
|
1788
|
+
kto[9] == pz ? OK : FALSE
|
|
1789
|
+
end
|
|
1790
|
+
|
|
1791
|
+
# Methode 97
|
|
1792
|
+
# Die ersten 9 Stellen werden als Zahl modulo 11 gerechnet; ein Rest von
|
|
1793
|
+
# 10 ergibt die Pruefziffer 0.
|
|
1794
|
+
def m97(kto, blz, um, rv)
|
|
1795
|
+
if rv
|
|
1796
|
+
rv.methode = "97"
|
|
1797
|
+
rv.pz_methode = 97
|
|
1798
|
+
end
|
|
1799
|
+
if kto[0] == 0 && kto[1] == 0 && kto[2] == 0 && kto[3] == 0 && kto[4] == 0 &&
|
|
1800
|
+
kto[5] == 0
|
|
1801
|
+
return INVALID_KTO
|
|
1802
|
+
end
|
|
1803
|
+
|
|
1804
|
+
# Pruefziffer temporaer loeschen -> atoi() ueber die ersten 9 Stellen
|
|
1805
|
+
pz = kto[0, 9].join.to_i % 11
|
|
1806
|
+
pz = 0 if pz == 10
|
|
1807
|
+
# CHECK_PZ10
|
|
1808
|
+
if rv
|
|
1809
|
+
rv.pz_pos = 10
|
|
1810
|
+
rv.pz = pz
|
|
1811
|
+
end
|
|
1812
|
+
kto[9] == pz ? OK : FALSE
|
|
1813
|
+
end
|
|
1814
|
+
|
|
1815
|
+
# Methode 98
|
|
1816
|
+
# Variante A: Modulus 10, Gewichtung 3, 1, 7, 3, 1, 7, 3;
|
|
1817
|
+
# Variante B: Verfahren 32 (Modulus 11, Gewichtung 2..7).
|
|
1818
|
+
def m98(kto, blz, um, rv)
|
|
1819
|
+
m1098(kto, blz, um, rv)
|
|
1820
|
+
end
|
|
1821
|
+
|
|
1822
|
+
# Methode 98a
|
|
1823
|
+
def m1098(kto, blz, um, rv)
|
|
1824
|
+
if rv
|
|
1825
|
+
rv.methode = "98a"
|
|
1826
|
+
rv.pz_methode = 1098
|
|
1827
|
+
end
|
|
1828
|
+
pz = kto[2] * 3 +
|
|
1829
|
+
kto[3] * 7 +
|
|
1830
|
+
kto[4] +
|
|
1831
|
+
kto[5] * 3 +
|
|
1832
|
+
kto[6] * 7 +
|
|
1833
|
+
kto[7] +
|
|
1834
|
+
kto[8] * 3
|
|
1835
|
+
|
|
1836
|
+
pz %= 10
|
|
1837
|
+
pz = 10 - pz if pz != 0
|
|
1838
|
+
# CHECK_PZX10
|
|
1839
|
+
if rv
|
|
1840
|
+
rv.pz_pos = 10
|
|
1841
|
+
rv.pz = pz
|
|
1842
|
+
end
|
|
1843
|
+
return OK if kto[9] == pz
|
|
1844
|
+
return FALSE if um != 0
|
|
1845
|
+
|
|
1846
|
+
m2098(kto, blz, um, rv)
|
|
1847
|
+
end
|
|
1848
|
+
|
|
1849
|
+
# Methode 98b (Verfahren 32)
|
|
1850
|
+
def m2098(kto, blz, um, rv)
|
|
1851
|
+
if rv
|
|
1852
|
+
rv.methode = "98b"
|
|
1853
|
+
rv.pz_methode = 2098
|
|
1854
|
+
end
|
|
1855
|
+
pz = kto[3] * 7 +
|
|
1856
|
+
kto[4] * 6 +
|
|
1857
|
+
kto[5] * 5 +
|
|
1858
|
+
kto[6] * 4 +
|
|
1859
|
+
kto[7] * 3 +
|
|
1860
|
+
kto[8] * 2
|
|
1861
|
+
|
|
1862
|
+
pz %= 11
|
|
1863
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1864
|
+
# CHECK_PZ10
|
|
1865
|
+
if rv
|
|
1866
|
+
rv.pz_pos = 10
|
|
1867
|
+
rv.pz = pz
|
|
1868
|
+
end
|
|
1869
|
+
kto[9] == pz ? OK : FALSE
|
|
1870
|
+
end
|
|
1871
|
+
|
|
1872
|
+
# Methode 99
|
|
1873
|
+
# Modulus 11, Gewichtung 2, 3, 4, 5, 6, 7, 2, 3, 4; Kontonummern von
|
|
1874
|
+
# 0396000000 bis 0499999999 sind ohne Pruefzifferberechnung gueltig.
|
|
1875
|
+
def m99(kto, blz, um, rv)
|
|
1876
|
+
if rv
|
|
1877
|
+
rv.methode = "99"
|
|
1878
|
+
rv.pz_methode = 99
|
|
1879
|
+
end
|
|
1880
|
+
s = kto.join
|
|
1881
|
+
if s >= "0396000000" && s < "0500000000"
|
|
1882
|
+
return OK
|
|
1883
|
+
end
|
|
1884
|
+
|
|
1885
|
+
pz = kto[0] * 4 +
|
|
1886
|
+
kto[1] * 3 +
|
|
1887
|
+
kto[2] * 2 +
|
|
1888
|
+
kto[3] * 7 +
|
|
1889
|
+
kto[4] * 6 +
|
|
1890
|
+
kto[5] * 5 +
|
|
1891
|
+
kto[6] * 4 +
|
|
1892
|
+
kto[7] * 3 +
|
|
1893
|
+
kto[8] * 2
|
|
1894
|
+
|
|
1895
|
+
pz %= 11
|
|
1896
|
+
pz = pz <= 1 ? 0 : 11 - pz
|
|
1897
|
+
# CHECK_PZ10
|
|
1898
|
+
if rv
|
|
1899
|
+
rv.pz_pos = 10
|
|
1900
|
+
rv.pz = pz
|
|
1901
|
+
end
|
|
1902
|
+
kto[9] == pz ? OK : FALSE
|
|
1903
|
+
end
|
|
1904
|
+
end
|
|
1905
|
+
end
|