Modulo 10, rekursiv Algorithmus

nafets

Mitglied
Hallo

Es wird immer komplizierter. Ich brauche für eine Ziffernprüfung die Funktion Modulo 10, rekursiv. Das kommt aus dem Bankwesen oder so. Auf jedenfall ist das die Vorgabe. hat jemand Ahnung davon?

Ich habe ein VB-CodeStück gefunden. Aber ich bin irgendwie nicht im Stande das in VBS - ASP umzuschreiben. Kann mir da jemand helfen.

Code:
Function Modulo10(ByVal strNummer As String) As Integer

    'strNummer darf nur Ziffern zwischen 0 und 9 enthalten!

    Dim intTabelle(0 To 9) As Integer
    Dim intÜbertrag As Integer
    Dim intIndex As Integer

    intTabelle(0) = 0: intTabelle(1) = 9
    intTabelle(2) = 4: intTabelle(3) = 6
    intTabelle(4) = 8: intTabelle(5) = 2
    intTabelle(6) = 7: intTabelle(7) = 1
    intTabelle(8) = 3: intTabelle(9) = 5

    For intIndex = 1 To Len(strNummer)
        intÜbertrag = intTabelle((intÜbertrag + Mid(strNummer, intIndex, 1)) Mod 10)
    Next

    Modulo10 = (10 - intÜbertrag) Mod 10

End Function

Danke & Gruss

Nafets
 

Luzie

Erfahrenes Mitglied
Ich weiss jetzt nicht genau, was Du damit möchtest, aber man kann es umschreiben.

Code:
<% 
Function Modulo10(ByVal strNummer)

    'strNummer darf nur Ziffern zwischen 0 und 9 enthalten!

    Dim intTabelle(9) 
    Dim intUbertrag 
    Dim intIndex

    intTabelle(0) = 0: intTabelle(1) = 9
    intTabelle(2) = 4: intTabelle(3) = 6
    intTabelle(4) = 8: intTabelle(5) = 2
    intTabelle(6) = 7: intTabelle(7) = 1
    intTabelle(8) = 3: intTabelle(9) = 5

    For intIndex = 1 To Len(strNummer)
        intUbertrag = intTabelle((intUbertrag + Mid(strNummer, intIndex, 1)) Mod 10)
    Next

    Modulo10 = (10 - cint(intUbertrag)) Mod 10

End Function 

Response.write Modulo10("28475")
%>

Du solltst aber auf jeden Fall vorher mit eine Regex prüfen, ob auch wirklich nur Ziffern von 0-9 eingegeben werden.
 

nafets

Mitglied
Hey Luzie

Das ist für eine ESR (Einzahlungsschein) Kontrolle.

Ich werde das bis Morgen ausprobieren.

Verstehe ich das richtig, dass ich bei Funktionen einen Wert übergeben kann, muss um überhaupt die Funktion korrekt aufzurufen?

Also die Zahl die ich prüfen lassen möchte.

Code:
myPruefung = modulo10(" & Request("zahl") & ")"

Dann sollte ich ja nachher die Prueffziffer in der Variable myPruefung haben.

Ich probier das mal aus. Danke mal vorerst. Gebe noch Bescheid obs klappt.

Gruss
 

Luzie

Erfahrenes Mitglied
Hallo

es geht ja darum, dass ein Wert durch diese Funktion muss. In der Funktion hat er die Variable StrNummer. Dadurch dass diese Variable als Argument in der Funktion sitzt, kannst Du ihn später beim Aufruf durch eine andere Variable oder einen Wert ersetzen.

Da die Funktion Fehler zurückgibt, wenn auch alphanum. Zeichen oder Sonderzeichen eingegeben worden sind, musst Du dies halt vorher ausschließen.

Ist jetzt eine Möglichkeit. Ich denke nicht, dass Du ein Request.Form() ungeprüft auf die Funktion lolässen willst, außer, es handelt sich um bereits fest bestehende Werte

Code:
function check(byval strtext)
dim objreg
set objreg = new regexp
objreg.pattern = "^[0-9]*$"
check = objreg.test(strtext)
set objreg = nothing
end function

' --- gibt true oder false zurück

dim myZahl
myZahl = "1235555"
if check(myzahl) then
	Response.write Modulo10(myzahl)
else
	Response.write "Fehler - Nur Zahlen eigenben"
end if
 

nafets

Mitglied
Hey Luzie

Ich habe das ausprobiert. Das mit dem ungeprüfen Wert habe ich natürlich berücksichtig. Es wird eine Zahl welche aus einer Rechenabfrage aus der SQL kommt durchgelassen. Von dieser brauche ich ja die Prüfziffer. Da die Zahl aber mit Kommastellen kommt und deshalb durch einen Punkt getrennt ist habe ich vorher die Split Funktion benützt.

Zudem muss ich den Betrag ja sowieso splitten, da die Franken und Rappen in zwei unterschiedliche Felder auf dem Einzahlungsschein kommen.

Das eigentliche Problem ist jedoch dass wenn ich die Funktion Modulo10 einbaue, bringt er mir immer einen Syntaxfehler in der ersten Zeile.

Code:
Kompilierungsfehler in Microsoft VBScript Fehler "800a03ea' 

Syntaxfehler 

/admin/fibu/rechnungen.asp, line 228 

Function Modulo10(ByVal strNummer)
^

Komisch, an was kann das liegen. Der Fehler kommt auch wenn ich gar nichts durch die Funktion lauffen lassen möchte. Also die Funktion wird noch gar nicht benützt und der Fehler kommt.

Weisst du weiter?

Gruss
 

nafets

Mitglied
Hey Luzie

hat sich erledigt. Habe den Fehler gefunden! Voll der Anfängerfehler oder so. Ich habe die Function in einer While Not Schleife eingebunden. Das stört! Habe Sie jetzt am Anfang des Scripts gepackt. Macht ja eigentlich auch Sinn und ist wahrscheindlich auch so gedacht. Tja das kommt davon wenn man sich zuwenig mit Funktionen auseinandersetzt.

Aber Luzie ich muss dir 1000-mal danken. Du hilfst mir immer so gut. Ich habe fast das Gefühl du bist ein kleiner Engel auf Erden !! LOB. Dein Script hat mir sehr geholfen.

Bis zum nächsten Mal.

Gruss

Nafets