Feedback

VB - Zahlen Addition als Spam Schutz

Veröffentlicht von am 2/7/2009
(2 Bewertungen)
Mit dieser Klasse kann eine Zahlenvalidation generiert werden
die ein User dazu auffordert 2 Zahlen miteinander zu addieren.
Das Ergebnis kann dann überprüft werden ob es richtig ist.
Dabei wird die ausgeschrieben Zahl für die validierung verwendet.
Optimal um als Spam-Schutz z.B. bei Registrierungen zu fungieren.
''' <summary>
''' Mit dieser Klasse kann eine Zahlenvalidation generiert werden
''' die ein User dazu auffordert 2 Zahlen miteinander zu addieren. 
''' Das Ergebnis kann dann überprüft werden ob es richtig ist.
''' Dabei wird die ausgeschrieben Zahl für die validierung verwendet.
''' Optimal um als Spam-Schutz z.B. bei Registrierungen zu fungieren.
''' </summary>
''' <remarks></remarks>
Public Class NumberValidator
    Public GermanNumbers As Dictionary(Of String, Integer)

    Sub New()
        GermanNumbers = New Dictionary(Of String, Integer)
        GermanNumbers.Add("null", 0)
        GermanNumbers.Add("eins", 1)
        GermanNumbers.Add("zwei", 2)
        GermanNumbers.Add("drei", 3)
        GermanNumbers.Add("vier", 4)
        GermanNumbers.Add("fünf", 5)
        GermanNumbers.Add("sechs", 6)
        GermanNumbers.Add("sieben", 7)
        GermanNumbers.Add("acht", 8)
        GermanNumbers.Add("neun", 9)
        GermanNumbers.Add("zehn", 10)
        GermanNumbers.Add("elf", 11)
        GermanNumbers.Add("zwölf", 12)
        GermanNumbers.Add("dreizehn", 13)
        GermanNumbers.Add("vierzehn", 14)
        GermanNumbers.Add("fünfzehn", 15)
        GermanNumbers.Add("sechszehn", 16)
        GermanNumbers.Add("siebzehn", 17)
        GermanNumbers.Add("achtzehn", 18)
    End Sub

    Public Structure ResultField
        Public Number1 As Integer
        Public Number2 As Integer
        Public Result As Integer
        Public Number1String As String
        Public Number2String As String
        Public ResultString As String
        Public Question As String
    End Structure

    ''' <summary>
    ''' Diese Funktion generiert eine Fragestellung um 2 Zahlen zu addieren.
    ''' Dabei wird einmal die Frage selber generiert und das Ergebnis zum späteren vergleich
    ''' </summary>
    Public Function GenerateQuestion() As ResultField
        Dim SystemResult As New ResultField

        SystemResult.Number1 = RandomNumber(0, 9)
        SystemResult.Number2 = RandomNumber(0, 9)
        SystemResult.Number1String = ""
        SystemResult.Number2String = ""

        SystemResult.Result = SystemResult.Number1 + SystemResult.Number2

        For Each KVP As KeyValuePair(Of String, Integer) In GermanNumbers
            If KVP.Value = SystemResult.Number1 Then
                SystemResult.Number1String = KVP.Key
            End If

            If KVP.Value = SystemResult.Number2 Then
                SystemResult.Number2String = KVP.Key
            End If

            If KVP.Value = SystemResult.Result Then
                SystemResult.ResultString = KVP.Key
            End If
        Next

        SystemResult.Question = "Addiere " & SystemResult.Number1String & " und " & SystemResult.Number2String

        Return SystemResult
    End Function

    ''' <summary>
    ''' Diese Funktion überprüft das Systemgenerierte Ergebnis mit dem Ergebnis des Users also die ausgeschrieben Zahl
    ''' </summary>
    ''' <param name="SystemResult">Das System-Ergebnis</param>
    ''' <param name="UserResult">Das Egebnis vom User als ausgeschrieben Zahl</param>
    Public Function CheckUserResult(ByVal SystemResult As ResultField, ByVal UserResult As String) As Boolean
        If SystemResult.ResultString = UserResult Then Return True
    End Function

    Private Function RandomNumber(ByVal Min As Long, ByVal Max As Long) As Long
        Randomize()
        RandomNumber = (Rnd() * (Max - Min)) + Min
    End Function
End Class
Abgelegt unter Spam, Zahlen, Addition.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!