Mein erster Prüfsummenberechner

  • Hallo.

    Mußte heute viel Arbeit mit nehmen und da sind 500 Prüfsummen zu ermitteln.

    Und L3viathan2142 brachte mich auf die Idee, das ganze via Script zu machen. Danke L3viathan2142.

    Eingabe 1 Bsp.: 7953
    Eingabe 2 Bsp.: 1310
    Ausgabe = Eingabe 1 + Eingabe 2 Bsp.: 9263
    Prüfsumme = alle Ziffern der Eingabe 1, Eingabe 2 und der Ausgabe addieren, also 7+9+5+3+1+3+1+0+9+2+6+3
    Da dann aber 49 heraus kommt weiter rechnen: 4+9 = 13.
    Immer noch zweistellig, also weiter rechnen= 1+3 = 4

    Und die Prüfsumme ist 4 und kommt mit folgenden Script auch raus.

    BITTE !!!
    Ich arbeite das erste mal mit "StringMid" und nimmt es mir nicht zu übel, das das Script evtl. doppelt so lang ist wie man es machen könnte. Aber ich meine das es fehlerfrei arbeitet.

    Einfach mal testen.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MMT Prüfsummenberechnung v. AHL", 457, 99, 193, 125)
    $Input1 = GUICtrlCreateInput("9999", 8, 8, 97, 21)
    $Input2 = GUICtrlCreateInput("9999", 112, 8, 97, 21)
    $Input3 = GUICtrlCreateInput("", 240, 8, 97, 21)
    $Input4 = GUICtrlCreateInput("", 384, 8, 57, 21)
    $Label1 = GUICtrlCreateLabel("EIN 1", 8, 32, 36, 17)
    $Label2 = GUICtrlCreateLabel("EIN 2", 112, 32, 36, 17)
    $Label3 = GUICtrlCreateLabel("Ausgabe", 240, 32, 45, 17)
    $Label4 = GUICtrlCreateLabel("Prüfsumme", 384, 32, 56, 17)

    [/autoit] [autoit][/autoit] [autoit]

    $Berechnen = GUICtrlCreateButton("Berechnen", 8, 50, 441, 41, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Berechnen
    $wert3 =(StringMid(GUICtrlRead($Input1),1,4))+(StringMid(GUICtrlRead($Input2),1,4))
    GUICtrlSetData($Input3, $wert3)
    ;zähle alle Ziffer der Werte 1 bis 3 zusammen
    $wert4 =((StringMid(GUICtrlRead($Input1),1,1))+(StringMid(GUICtrlRead($Input1),2,1))+(StringMid(GUICtrlRead($Input1),3,1))+(StringMid(GUICtrlRead($Input1),4,1))+(StringMid(GUICtrlRead($Input2),1,1))+(StringMid(GUICtrlRead($Input2),2,1))+(StringMid(GUICtrlRead($Input2),3,1))+(StringMid(GUICtrlRead($Input2),4,1))+(StringMid(GUICtrlRead($Input3),1,1))+(StringMid(GUICtrlRead($Input3),2,1))+(StringMid(GUICtrlRead($Input3),3,1))+(StringMid(GUICtrlRead($Input3),4,1))+(StringMid(GUICtrlRead($Input3),5,1)))
    GUICtrlSetData($Input4, $wert4)
    ; Zahl ist noch nicht einstellig, also beide Stelle von Wert4 addieren
    $wert5 =((StringMid(GUICtrlRead($Input4),1,1))+(StringMid(GUICtrlRead($Input4),2,1))+(StringMid(GUICtrlRead($Input4),3,1)))
    GUICtrlSetData($Input4, $wert5)
    if GUICtrlRead($Input1) > 9 Then
    $wert6 =((StringMid(GUICtrlRead($Input4),1,1))+(StringMid(GUICtrlRead($Input4),2,1)))
    GUICtrlSetData($Input4, $wert6)
    EndIf


    MsgBox(0, "MMT Prüfsummenberechnung v. AHL. für 4-er Zahlen", "Prüfsumme " & $wert6)
    EndSwitch
    WEnd

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    Einmal editiert, zuletzt von Alina (27. April 2009 um 20:52)

  • Ich poste mal meine Version:

    Spoiler anzeigen
    [autoit]

    $Zahl=InputBox("","")
    $rechts=StringRight($Zahl,4)
    $links=StringLeft($Zahl,4)
    $nextes=$rechts+$links
    $pruef=_MathEx_Checksum($rechts,1)+_MathEx_Checksum($links,1)+_MathEx_Checksum($nextes,1)
    MsgBox(0,"",$Zahl & "-" & $nextes & "-" & $pruef)
    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MathEx_Checksum
    ; Description ...: Returns the Checksum of a number
    ; Syntax.........: _MathEx_Checksum($number[, $modus=0])
    ; Parameters ....: $number - Number to calc
    ; $modus - The kind of checksum: 0: normal; 1:iterate; 2:alternate
    ; Return values .: Success - The checksum
    ; Failure - -1, sets @error
    ; |1 - $number or $modus is not an integer
    ; Author ........: BugFix <BugFix at autoit dot de>, Matthias Gianfelice <matthias at gianfelice dot de>
    ; ===============================================================================================================================
    Func _MathEx_Checksum($number, $modus = 0)
    $integer_number_mathex_checksum = Number($number)
    If IsInt($integer_number_mathex_checksum) = 1 And $integer_number_mathex_checksum > 0 And IsInt($modus) Then
    While StringLen($integer_number_mathex_checksum) > 1
    Local $array_number_mathex_checksum = StringSplit($integer_number_mathex_checksum, '', 2)
    $integer_number_mathex_checksum = 0
    If $modus = 2 Then
    Local $mul = -1
    For $i = UBound($array_number_mathex_checksum) - 1 To 1 Step -1
    $array_number_mathex_checksum[$i - 1] = $array_number_mathex_checksum[$i] + ($mul * $array_number_mathex_checksum[$i - 1])
    $mul *= -1
    Next
    Return $array_number_mathex_checksum[0]
    Else
    For $i = 0 To UBound($array_number_mathex_checksum) - 1
    $integer_number_mathex_checksum += $array_number_mathex_checksum[$i]
    Next
    If $modus = 0 Then ExitLoop
    EndIf
    WEnd
    Return $integer_number_mathex_checksum
    Else
    SetError(1)
    Return -1
    EndIf
    EndFunc

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Jam00: weil ich mir Hinweise erhoffe, was ich besser machen kann

    @L3viathan2142: Was machst Du aber, wenn die Eing1 und Eing2 unterschiedlich sind. Das mit 1234 und 4321 war doch nur ein Beispiel darauf das es jeweils 4er Zahlen sind.

    Noch die Maximale Eingabe auf 4 Ziffern begrenzt:

    Spoiler anzeigen
    [autoit]


    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("MMT Prüfsummenberechnung v. AHL", 457, 99, 193, 125)
    $Input1 = GUICtrlCreateInput("", 8, 8, 97, 21)
    GUICtrlSetLimit(-1, 4)
    $Input2 = GUICtrlCreateInput("", 112, 8, 97, 21)
    GUICtrlSetLimit(-1, 4)
    $Input3 = GUICtrlCreateInput("", 240, 8, 97, 21)
    $Input4 = GUICtrlCreateInput("", 384, 8, 57, 21)
    $Label1 = GUICtrlCreateLabel("EIN 1", 8, 32, 36, 17)
    $Label2 = GUICtrlCreateLabel("EIN 2", 112, 32, 36, 17)
    $Label3 = GUICtrlCreateLabel("Ausgabe", 240, 32, 45, 17)
    $Label4 = GUICtrlCreateLabel("Prüfsumme", 384, 32, 56, 17)

    [/autoit] [autoit][/autoit] [autoit]

    $Berechnen = GUICtrlCreateButton("Berechnen", 8, 50, 441, 41, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Berechnen
    $wert3 =(StringMid(GUICtrlRead($Input1),1,4))+(StringMid(GUICtrlRead($Input2),1,4))
    GUICtrlSetData($Input3, $wert3)
    ;zähle alle Ziffer der Werte 1 bis 3 zusammen
    $wert4 =((StringMid(GUICtrlRead($Input1),1,1))+(StringMid(GUICtrlRead($Input1),2,1))+(StringMid(GUICtrlRead($Input1),3,1))+(StringMid(GUICtrlRead($Input1),4,1))+(StringMid(GUICtrlRead($Input2),1,1))+(StringMid(GUICtrlRead($Input2),2,1))+(StringMid(GUICtrlRead($Input2),3,1))+(StringMid(GUICtrlRead($Input2),4,1))+(StringMid(GUICtrlRead($Input3),1,1))+(StringMid(GUICtrlRead($Input3),2,1))+(StringMid(GUICtrlRead($Input3),3,1))+(StringMid(GUICtrlRead($Input3),4,1))+(StringMid(GUICtrlRead($Input3),5,1)))
    GUICtrlSetData($Input4, $wert4)
    ; Zahl ist noch nicht einstellig, also beide Stelle von Wert4 addieren
    $wert5 =((StringMid(GUICtrlRead($Input4),1,1))+(StringMid(GUICtrlRead($Input4),2,1))+(StringMid(GUICtrlRead($Input4),3,1)))
    GUICtrlSetData($Input4, $wert5)
    if GUICtrlRead($Input1) > 9 Then
    $wert6 =((StringMid(GUICtrlRead($Input4),1,1))+(StringMid(GUICtrlRead($Input4),2,1)))
    GUICtrlSetData($Input4, $wert6)
    EndIf
    MsgBox(0, "MMT Prüfsummenberechnung v. AHL. für 4-er Zahlen", "Prüfsumme " & $wert6)
    EndSwitch

    WEnd

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    2 Mal editiert, zuletzt von Alina (27. April 2009 um 21:21)