Domino 9 und frühere Versionen > Entwicklung

Mehrstellige Zahl in mehrere einzelne Variablen unterteilen

<< < (5/6) > >>

Glombi:
Hier eine Lösung in LotusScript - die Formel musst Du ggf. an den Kontext anpassen (diese Formel ist bspw. für einen Button):

Das Ergebnis steht in der Variablen "pruefziffer". Der Wert zur Berechnung wird aus dem Feld "KontoNr" geholt. Das muss ein Textfeld sein.

Dim ws As NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   
   Dim kontonr As String
   Dim laenge As Integer
   Dim zahl As Integer
   Dim i As Integer
   Dim summe As Integer
   Dim modulo_erg As Integer
   Dim pruefziffer As Integer
   
   Set ws = New NotesUIWorkspace
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   
   kontonr = Cstr( doc.KontoNr(0)    )
   laenge = Len( kontonr )
   summe = 0
   For i = 2 To laenge
      zahl = Cint( Mid( kontonr, laenge - i + 1, 1 ) )
      summe = summe + zahl * i
   Next
   
   modulo_erg = summe Mod 11
   
   If modulo_erg <= 1 Then
      pruefziffer = 0
   Else
      pruefziffer = 11 - modulo_erg
   End If

Andreas

animate:
ah, sehr schön.

nur die Anforderung

--- Zitat ---Hierbei ist immer die letzte Stelle die Prüfziffer. Die 6 Ziffern davor werden zur Berchnung benötigt, wenn die Kontonummer kürzer als 7 Zeichen (also die Prüfziffer plus die 6 Berechnungsziffern) ist brauche ich nur die Stellen die vorhanden sind zur Berechnung.
--- Ende Zitat ---
ist noch nicht mit eingebaut

Wenn ich das richtig sehe, dann könntest du prüfen, wie lang die Nummer ist und wenn sie > 7 ist, dann einfach die überflüssigen Zahlen abschneiden
ungefähr so

...
kontonr = Cstr( doc.KontoNr(0)    )

If Len(kontonr) > 7 then
   kontonr = right(kontonr, 7)
End if

laenge = Len( kontonr )
...

Glombi:
@Thomas:
Meine Formel geht auch für kürzere Kontonummern. Deine Formel geht von mehr als 7 Stellen aus.

Andreas

animate:
ich habe das so verstanden, dass die Zahl 2-10 stellig sein kann.
Aber nur die letzten 7 Stellen werden zur Berechnung benötigt, wenn die Zahl kleiner als 7 Stellen ist, dann werden alle Stellen zur Berechnung verwendet.

Deswegen dachte ich, dass man eine Zahl, die größer ist als 7 Stellen, kürzen muss, denn sonst würden mit deinem Algorithmus mehr als 7 Stellen zur Berechnung verwendet, was evtl ein falsches Ergebnis liefern könnte.

Glombi:
Ich habe es mir nochmal genau durchgelesen - es kann in der Tat sein, dass nur die letzten 7 Zahlen herangezogen werden sollen. Dann muss Dein Code noch verwendet werden:

Dim ws As NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim doc As NotesDocument
   
   Dim kontonr As String
   Dim laenge As Integer
   Dim zahl As Integer
   Dim i As Integer
   Dim summe As Integer
   Dim modulo_erg As Integer
   Dim pruefziffer As Integer
   
   Set ws = New NotesUIWorkspace
   Set uidoc = ws.CurrentDocument
   Set doc = uidoc.Document
   
   kontonr = Cstr( doc.KontoNr(0)    )
   If Len(kontonr) > 7 then
      kontonr = Right$(kontonr, 7)
   End if
   laenge = Len( kontonr )
   summe = 0
   For i = 2 To laenge
      zahl = Cint( Mid( kontonr, laenge - i + 1, 1 ) )
      summe = summe + zahl * i
   Next
   
   modulo_erg = summe Mod 11
   
   If modulo_erg <= 1 Then
      pruefziffer = 0
   Else
      pruefziffer = 11 - modulo_erg
   End If


Andreas

Die ersten 3 Stellen sind dann wohl die Filialbezeichnung oder so was in der Art.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln