kontocheck 0.4.2 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -27,7 +27,7 @@ begin
27
27
  gem.description = %Q{Check whether a certain bic/account-no-combination can possibly be valid. It uses the C library konto_check (see http://sourceforge.net/projects/kontocheck/) by Michael Plugge.}
28
28
  gem.email = "jan@general-scripting.com"
29
29
  gem.homepage = "http://github.com/jeanmartin/konto_check"
30
- gem.authors = ["Provideal Systems GmbH","Michael Plugge","Jan Schwenzien"]
30
+ gem.authors = ["Michael Plugge","Jan Schwenzien","Provideal Systems GmbH"]
31
31
  gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
32
32
  #gem.files.exclude "ext"
33
33
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
data/VERSION.yml CHANGED
@@ -1,4 +1,5 @@
1
- major: 0
2
- minor: 4
3
- patch: 2
4
-
1
+ ---
2
+ :major: 0
3
+ :minor: 4
4
+ :patch: 4
5
+ :build:
@@ -48,9 +48,9 @@
48
48
 
49
49
  /* Definitionen und Includes */
50
50
  #ifndef VERSION
51
- #define VERSION "4.2"
51
+ #define VERSION "4.4"
52
52
  #endif
53
- #define VERSION_DATE "2012-10-24"
53
+ #define VERSION_DATE "2013-02-02"
54
54
 
55
55
  #ifndef INCLUDE_KONTO_CHECK_DE
56
56
  #define INCLUDE_KONTO_CHECK_DE 1
@@ -14102,7 +14102,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
14102
14102
  /* Berechnung nach der Methode C6 +���4 */
14103
14103
  /*
14104
14104
  * ######################################################################
14105
- * # Berechnung nach der Methode C6 (gendert zum 6. Juni 2011) #
14105
+ * # Berechnung nach der Methode C6 (letze nderung 4.3.2013) #
14106
14106
  * ######################################################################
14107
14107
  * # Modulus 10, Gewichtung 1, 2, 1, 2, 1, 2, 1, 2 #
14108
14108
  * # #
@@ -14111,12 +14111,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
14111
14111
  * # 10-stellig darzustellen. Die 10. Stelle der Konto-nummer ist die #
14112
14112
  * # Pr�fziffer. #
14113
14113
  * # #
14114
- * # Kontonummern, die an der 1. Stelle von links der 10-stelligen #
14115
- * # Kontonummer einen der Wert 4 oder 8 beinhalten sind falsch. #
14116
- * # #
14117
- * # Kontonummern, die an der 1. Stelle von links der 10-stelligen #
14118
- * # Kontonummer einen der Werte 0, 1, 2, 3, 5, 6, 7 oder 9 beinhalten #
14119
- * # sind wie folgt zu pr�fen: #
14114
+ * # Alle Kontonummern sind wie folgt zu pr�fen: #
14120
14115
  * # #
14121
14116
  * # F�r die Berechnung der Pr�fziffer werden die Stellen 2 bis 9 der #
14122
14117
  * # Kontonummer verwendet. Diese Stellen sind links um eine Zahl #
@@ -14130,9 +14125,11 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
14130
14125
  * # 1 4451981 #
14131
14126
  * # 2 4451992 #
14132
14127
  * # 3 4451993 #
14128
+ * # 4 4344992 #
14133
14129
  * # 5 4344990 #
14134
14130
  * # 6 4344991 #
14135
14131
  * # 7 5499570 #
14132
+ * # 8 4451994 #
14136
14133
  * # 9 5499579 #
14137
14134
  * # #
14138
14135
  * # Die Berechnung und m�gliche Ergebnisse entsprechen der Methode 00. #
@@ -14157,9 +14154,15 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
14157
14154
  case '1': pz=33; break;
14158
14155
  case '2': pz=36; break;
14159
14156
  case '3': pz=38; break; /* neu zum 7.6.2010 */
14160
- case '5': pz=33; break; /* neu zum 6.6.2011 */
14161
- case '6': pz=34; break; /* neu zum 6.6.2011 */
14157
+ #if PZ_METHODEN_2013_03_04
14158
+ case '4': pz=45; break; /* neu zum 4.3.2013 */
14159
+ #endif
14160
+ case '5': pz=41; break; /* neu zum 6.6.2011 */
14161
+ case '6': pz=43; break; /* neu zum 6.6.2011 */
14162
14162
  case '7': pz=31; break;
14163
+ #if PZ_METHODEN_2013_03_04
14164
+ case '8': pz=40; break; /* neu zum 4.3.2013 */
14165
+ #endif
14163
14166
  case '9': pz=40; break;
14164
14167
  default: return INVALID_KTO;
14165
14168
  }
@@ -14539,7 +14542,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
14539
14542
  /* Berechnung nach der Methode D1 +���4 */
14540
14543
  /*
14541
14544
  * ######################################################################
14542
- * # Berechnung nach der Methode D1 (gendert zum 5.9.2011) #
14545
+ * # Berechnung nach der Methode D1 (letzte nderung 4.3.2013) #
14543
14546
  * ######################################################################
14544
14547
  * # Modulus 10, Gewichtung 1, 2, 1, 2, 1, 2, 1, 2 #
14545
14548
  * # #
@@ -14549,11 +14552,11 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
14549
14552
  * # Pr�fziffer. #
14550
14553
  * # #
14551
14554
  * # Kontonummern, die an der 1. Stelle von links der 10-stelligen #
14552
- * # Kontonummer einen der Wert 7 oder 8 beinhalten sind falsch. #
14555
+ * # Kontonummer den Wert 8 enthalten sind falsch. #
14553
14556
  * # #
14554
14557
  * # Kontonummern, die an der 1. Stelle von links der 10-stelligen #
14555
- * # Kontonummer einen der Werte 0, 1, 2, 3, 4, 5, 6 oder 9 beinhalten #
14556
- * # sind wie folgt zu pr�fen: #
14558
+ * # Kontonummer einen der Werte 0, 1, 2, 3, 4, 5, 6, 7 oder 9 #
14559
+ * # beinhalten sind wie folgt zu pr�fen: #
14557
14560
  * # #
14558
14561
  * # F�r die Berechnung der Pr�fziffer werden die Stellen 2 bis 9 der #
14559
14562
  * # Kontonummer von links verwendet. Diese Stellen sind links um eine #
@@ -14570,6 +14573,7 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
14570
14573
  * # 4 4363384 #
14571
14574
  * # 5 4363385 #
14572
14575
  * # 6 4363386 #
14576
+ * # 7 4363387 #
14573
14577
  * # 9 4363389 #
14574
14578
  * # #
14575
14579
  * # Die Berechnung und m�gliche Ergebnisse entsprechen der #
@@ -14590,7 +14594,11 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
14590
14594
  retvals->pz_methode=131;
14591
14595
  }
14592
14596
  #endif
14597
+ #if PZ_METHODEN_2013_03_04
14598
+ if(*kto=='8')return INVALID_KTO;
14599
+ #else
14593
14600
  if(*kto=='7' || *kto=='8')return INVALID_KTO;
14601
+ #endif
14594
14602
  pz=31;
14595
14603
 
14596
14604
  #ifdef __ALPHA
@@ -15447,6 +15455,58 @@ static int kto_check_int(char *x_blz,int pz_methode,char *kto)
15447
15455
  if(pz)pz=10-pz;
15448
15456
  CHECK_PZ10;
15449
15457
 
15458
+ /* Berechnungsmethoden E0 bis E9 +���3
15459
+ Berechnung nach der Methode E0 +���4 */
15460
+ /*
15461
+ * ######################################################################
15462
+ * # Berechnung nach der Methode E0 #
15463
+ * ######################################################################
15464
+ * # Modulus 10, Gewichtung 2, 1, 2, 1, 2, 1, 2, 1, 2 #
15465
+ * # Die Stellen der Kontonummer sind von rechts nach links mit den #
15466
+ * # Ziffern 2, 1, 2, 1, 2 usw. zu multiplizieren. Die jeweiligen #
15467
+ * # Produkte werden addiert, nachdem jeweils aus den zweistelligen #
15468
+ * # Produkten die Quersumme gebildet wurde (z. B. Produkt 18 = #
15469
+ * # Quersumme 9) plus den Wert 7. Nach der Addition bleiben au�er #
15470
+ * # der Einerstelle alle anderen Stellen unber�cksichtigt. Die #
15471
+ * # Einerstelle wird von dem Wert 10 subtrahiert. Das Ergebnis ist #
15472
+ * # die Pr�fziffer (10. Stelle der Kontonummer). #
15473
+ * ######################################################################
15474
+ */
15475
+
15476
+ case 140:
15477
+ #if DEBUG>0
15478
+ if(retvals){
15479
+ retvals->methode="E0";
15480
+ retvals->pz_methode=140;
15481
+ }
15482
+ #endif
15483
+
15484
+ /* Das Verfahren entspricht (bis auf die zus�tzliche 7) genau dem
15485
+ * Verfahren 00; der Programmcode ist auch von diesem kopiert.
15486
+ */
15487
+ #ifdef __ALPHA
15488
+ pz = ((kto[0]<'5') ? (kto[0]-'0')*2 : (kto[0]-'0')*2-9)
15489
+ + (kto[1]-'0')
15490
+ + ((kto[2]<'5') ? (kto[2]-'0')*2 : (kto[2]-'0')*2-9)
15491
+ + (kto[3]-'0')
15492
+ + ((kto[4]<'5') ? (kto[4]-'0')*2 : (kto[4]-'0')*2-9)
15493
+ + (kto[5]-'0')
15494
+ + ((kto[6]<'5') ? (kto[6]-'0')*2 : (kto[6]-'0')*2-9)
15495
+ + (kto[7]-'0')
15496
+ + ((kto[8]<'5') ? (kto[8]-'0')*2 : (kto[8]-'0')*2-9);
15497
+ #else
15498
+ pz=(kto[1]-'0')+(kto[3]-'0')+(kto[5]-'0')+(kto[7]-'0');
15499
+ if(kto[0]<'5')pz+=(kto[0]-'0')*2; else pz+=(kto[0]-'0')*2-9;
15500
+ if(kto[2]<'5')pz+=(kto[2]-'0')*2; else pz+=(kto[2]-'0')*2-9;
15501
+ if(kto[4]<'5')pz+=(kto[4]-'0')*2; else pz+=(kto[4]-'0')*2-9;
15502
+ if(kto[6]<'5')pz+=(kto[6]-'0')*2; else pz+=(kto[6]-'0')*2-9;
15503
+ if(kto[8]<'5')pz+=(kto[8]-'0')*2; else pz+=(kto[8]-'0')*2-9;
15504
+ #endif
15505
+ pz+=7;
15506
+ MOD_10_80; /* pz%=10 */
15507
+ if(pz)pz=10-pz;
15508
+ CHECK_PZ10;
15509
+
15450
15510
 
15451
15511
  /* nicht abgedeckte F�lle +���3 */
15452
15512
  /*
@@ -19539,7 +19599,7 @@ static int cmp_suche_sort(const void *ap,const void *bp)
19539
19599
  DLL_EXPORT int lut_suche_sort1(int anzahl,int *blz_base,int *zweigstellen_base,int *idx,int *anzahl_o,int **idx_op,int **cnt_op,int uniq)
19540
19600
  {
19541
19601
  int i,j,last_idx,*idx_a,*cnt_o;
19542
- #line 17560 "konto_check.lxx"
19602
+ #line 17614 "konto_check.lxx"
19543
19603
 
19544
19604
  if(idx_op)*idx_op=NULL;
19545
19605
  if(cnt_op)*cnt_op=NULL;
@@ -20477,7 +20537,7 @@ static int convert_encoding(char **data,UINT4 *len)
20477
20537
  DLL_EXPORT const char *pz2str(int pz,int *ret)
20478
20538
  {
20479
20539
  if(ret){
20480
- if(pz>=140)
20540
+ if(pz>=141)
20481
20541
  *ret=NOT_DEFINED;
20482
20542
  else
20483
20543
  *ret=OK;
@@ -81,6 +81,13 @@
81
81
 
82
82
  #define FLESSA_KORREKTUR 1
83
83
 
84
+ /* Zum Gueltigkeitstermin 4. Maerz 2013 erfolgen Aenderungen der
85
+ * Pruefzifferberechnungsmethoden C6 und D1; mit dem folgenden Makro werden
86
+ * diese Änderungen aktiviert.
87
+ */
88
+ #define PZ_METHODEN_2013_03_04 1
89
+
90
+
84
91
  /* Das Makro DEFAULT_ENCODING legt die Ausgabe-Kodierung für die Funktion
85
92
  * kto_check_retval2txt() und die Blocks Name, Kurzname und Ort aus der
86
93
  * LUT-Datei fest. Die folgenden Werte sind möglich:
@@ -56,7 +56,7 @@
56
56
 
57
57
  #define RUNTIME_ERROR(error) do{ \
58
58
  snprintf(error_msg,511,"KontoCheck::%s, %s",kto_check_retval2txt_short(error),kto_check_retval2txt(error)); \
59
- rb_raise(rb_eRuntimeError,error_msg); \
59
+ rb_raise(rb_eRuntimeError, "%s", error_msg); \
60
60
  }while(0)
61
61
 
62
62
  // Defining a space for information and references about the module to be stored internally
@@ -106,7 +106,7 @@ static void get_params_file(int argc,VALUE* argv,char *arg1s,int *arg1i,int *arg
106
106
  *(arg1s+len)=0;
107
107
  }
108
108
  else
109
- rb_raise(rb_eRuntimeError,"Unable to convert given filename.");
109
+ rb_raise(rb_eRuntimeError, "%s", "Unable to convert given filename.");
110
110
  }
111
111
 
112
112
  /**
@@ -226,9 +226,9 @@ static void get_params(int argc,VALUE* argv,char *arg1s,char *arg2s,int *argi,in
226
226
  break;
227
227
  default:
228
228
  if(!optargs)
229
- rb_raise(rb_eRuntimeError,"Unable to convert given blz.");
229
+ rb_raise(rb_eRuntimeError, "%s", "Unable to convert given blz.");
230
230
  else
231
- rb_raise(rb_eRuntimeError,"Unable to convert given value.");
231
+ rb_raise(rb_eRuntimeError, "%s", "Unable to convert given value.");
232
232
  break;
233
233
  }
234
234
  if(optargs==2)switch(TYPE(arg2_rb)){ /* f�r konto_check(): kto holen */
@@ -243,7 +243,7 @@ static void get_params(int argc,VALUE* argv,char *arg1s,char *arg2s,int *argi,in
243
243
  snprintf(arg2s,16,"%5.0f",NUM2DBL(arg2_rb));
244
244
  break;
245
245
  default:
246
- rb_raise(rb_eRuntimeError,"Unable to convert given kto.");
246
+ rb_raise(rb_eRuntimeError, "%s", "Unable to convert given kto.");
247
247
  break;
248
248
  }
249
249
  }
@@ -281,6 +281,52 @@ static VALUE konto_check(int argc,VALUE* argv,VALUE self)
281
281
  return rb_ary_new3(2,retval>0?Qtrue:Qfalse,INT2FIX(retval));
282
282
  }
283
283
 
284
+ /**
285
+ * KontoCheck::konto_check(<blz>, <kto>, <pz>)
286
+ *
287
+ * check whether the given account number kto kann possibly be
288
+ * a valid number of the bank with the bic blz.
289
+ *
290
+ * possible return values (and short description):
291
+ *
292
+ * LUT2_NOT_INITIALIZED "die Programmbibliothek wurde noch nicht initialisiert"
293
+ * MISSING_PARAMETER "Bei der Kontopr�fung fehlt ein notwendiger Parameter (BLZ oder Konto)"
294
+ *
295
+ * NOT_IMPLEMENTED "die Methode wurde noch nicht implementiert"
296
+ * UNDEFINED_SUBMETHOD "Die (Unter)Methode ist nicht definiert"
297
+ * INVALID_BLZ "Die (Unter)Methode ist nicht definiert"
298
+ * INVALID_BLZ_LENGTH "die Bankleitzahl ist nicht achtstellig"
299
+ * INVALID_KTO "das Konto ist ung�ltig"
300
+ * INVALID_KTO_LENGTH "ein Konto mu� zwischen 1 und 10 Stellen haben"
301
+ * FALSE "falsch"
302
+ * NOT_DEFINED "die Methode ist nicht definiert"
303
+ * BAV_FALSE "BAV denkt, das Konto ist falsch (konto_check h�lt es f�r richtig)"
304
+ * OK "ok"
305
+ * OK_NO_CHK "ok, ohne Pr�fung"
306
+ */
307
+ static VALUE konto_check_pz(int argc,VALUE* argv,VALUE self)
308
+ {
309
+ char kto[16],blz[16], pz[3],error_msg[512];
310
+ int retval, len;
311
+ strncpy(blz,RSTRING_PTR(argv[0]),15);
312
+ if((len=RSTRING_LEN(argv[0]))>15)len=15;
313
+ *(blz+len)=0;
314
+
315
+ strncpy(kto,RSTRING_PTR(argv[1]),15);
316
+ if((len=RSTRING_LEN(argv[1]))>15)len=15;
317
+ *(kto+len)=0;
318
+
319
+ strncpy(pz,RSTRING_PTR(argv[2]),2);
320
+ if((len=RSTRING_LEN(argv[2]))>2)len=2;
321
+ *(pz+len)=0;
322
+
323
+
324
+ if((retval=kto_check_pz(pz,kto,blz))==LUT2_NOT_INITIALIZED || retval==MISSING_PARAMETER)RUNTIME_ERROR(retval);
325
+ return rb_ary_new3(2,retval>0?Qtrue:Qfalse,INT2FIX(retval));
326
+ }
327
+
328
+
329
+
284
330
 
285
331
  /**
286
332
  * KontoCheck::init([lutfile[,level[,set]]])
@@ -376,7 +422,7 @@ static VALUE generate_lutfile_rb(int argc,VALUE* argv,VALUE self)
376
422
  *(input_name+len)=0;
377
423
  }
378
424
  else
379
- rb_raise(rb_eRuntimeError,"Unable to convert given input filename.");
425
+ rb_raise(rb_eRuntimeError, "%s", "Unable to convert given input filename.");
380
426
 
381
427
  if(TYPE(output_name_rb)==RUBY_T_STRING){
382
428
  strncpy(output_name,RSTRING_PTR(output_name_rb),FILENAME_MAX);
@@ -384,7 +430,7 @@ static VALUE generate_lutfile_rb(int argc,VALUE* argv,VALUE self)
384
430
  *(output_name+len)=0;
385
431
  }
386
432
  else
387
- rb_raise(rb_eRuntimeError,"Unable to convert given output filename.");
433
+ rb_raise(rb_eRuntimeError, "%s", "Unable to convert given output filename.");
388
434
 
389
435
  if(NIL_P(user_info_rb)){
390
436
  *user_info=0;
@@ -395,7 +441,7 @@ static VALUE generate_lutfile_rb(int argc,VALUE* argv,VALUE self)
395
441
  *(user_info+len)=0;
396
442
  }
397
443
  else
398
- rb_raise(rb_eRuntimeError,"Unable to convert given user_info string.");
444
+ rb_raise(rb_eRuntimeError, "%s", "Unable to convert given user_info string.");
399
445
 
400
446
  if(NIL_P(gueltigkeit_rb)){
401
447
  *gueltigkeit=0;
@@ -406,7 +452,7 @@ static VALUE generate_lutfile_rb(int argc,VALUE* argv,VALUE self)
406
452
  *(gueltigkeit+len)=0;
407
453
  }
408
454
  else
409
- rb_raise(rb_eRuntimeError,"Unable to convert given gueltigkeit string.");
455
+ rb_raise(rb_eRuntimeError, "%s", "Unable to convert given gueltigkeit string.");
410
456
 
411
457
  if(NIL_P(felder_rb))
412
458
  felder=DEFAULT_LUT_FIELDS_NUM;
@@ -562,7 +608,7 @@ static VALUE lut_info_rb(int argc,VALUE* argv,VALUE self)
562
608
  ****************************************************************************/
563
609
 
564
610
  static VALUE load_bank_data(VALUE self, VALUE path_rb) {
565
- rb_raise(rb_eRuntimeError, "Perhaps you used the old interface of konto_check.\n"
611
+ rb_raise(rb_eRuntimeError, "%s", "Perhaps you used the old interface of konto_check.\n"
566
612
  "Use KontoCheck::init() to initialize the library\n"
567
613
  "and check the order of function arguments for konto_test(blz,kto)");
568
614
  }
@@ -1413,6 +1459,7 @@ void Init_konto_check_raw()
1413
1459
  rb_define_module_function(KontoCheck,"init",init,-1);
1414
1460
  rb_define_module_function(KontoCheck,"free",free_rb,0);
1415
1461
  rb_define_module_function(KontoCheck,"konto_check",konto_check,-1);
1462
+ rb_define_module_function(KontoCheck,"konto_check_pz",konto_check_pz,-1);
1416
1463
  rb_define_module_function(KontoCheck,"bank_valid",bank_valid,-1);
1417
1464
  rb_define_module_function(KontoCheck,"bank_filialen",bank_filialen,-1);
1418
1465
  rb_define_module_function(KontoCheck,"bank_alles",bank_alles,-1);
data/kontocheck.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "kontocheck"
8
- s.version = "0.4.2"
8
+ s.version = "0.4.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Provideal Systems GmbH", "Michael Plugge", "Jan Schwenzien"]
12
- s.date = "2012-11-25"
11
+ s.authors = ["Michael Plugge", "Jan Schwenzien", "Provideal Systems GmbH"]
12
+ s.date = "2013-05-26"
13
13
  s.description = "Check whether a certain bic/account-no-combination can possibly be valid. It uses the C library konto_check (see http://sourceforge.net/projects/kontocheck/) by Michael Plugge."
14
14
  s.email = "jan@general-scripting.com"
15
15
  s.extensions = ["ext/konto_check_raw/extconf.rb"]
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  "init.rb",
32
32
  "kontocheck.gemspec",
33
33
  "lib/konto_check.rb",
34
+ "lib/kontocheck.rb",
34
35
  "test/helper.rb",
35
36
  "test/test_konto_check.rb"
36
37
  ]
data/lib/kontocheck.rb ADDED
@@ -0,0 +1 @@
1
+ require 'konto_check'
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kontocheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Provideal Systems GmbH
9
8
  - Michael Plugge
10
9
  - Jan Schwenzien
10
+ - Provideal Systems GmbH
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-11-25 00:00:00.000000000 Z
14
+ date: 2013-05-26 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: thoughtbot-shoulda
@@ -53,6 +53,7 @@ files:
53
53
  - init.rb
54
54
  - kontocheck.gemspec
55
55
  - lib/konto_check.rb
56
+ - lib/kontocheck.rb
56
57
  - test/helper.rb
57
58
  - test/test_konto_check.rb
58
59
  homepage: http://github.com/jeanmartin/konto_check