''' <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