EDIT: kann aber auch geknackt werden, für die die sich damit auskennen
ihr baut in eure Anwendung 2 Felder ein, ein Eingabefeld für die Angabe vom Benutzer und ein Feld für die generierte Zahl
Der User trägt dann die Kombination ein und in eurem Programm könnt ihr dann prüfen,
so wie mit dem 2. Button ob die Nummer stimmt.
Die Zahlen zum passenden String im Replace-Bereich könnt ihr ändern wie ihr wollt,
dann kommt beim generieren eine andere Seriennummer raus
Ich verwende das z.B in meiner Pyro Steuerung, auch wenn der Code falsch ist funktioniert das Programm,
nur die RS232 wird beschränkt und sendet ein bisserl weniger als es normalerweise soll.
Sozusagen ist die Software im Demomodus.
Code: Alles auswählen
Global serial$ , uservorgabe$ , controlstr.q
Procedure.s x(a$)
a$ = LCase(a$)
a$ = Left(a$, 11)
ReplaceString(a$, "a", "1", 2, 1) : ReplaceString(a$, "b", "3", 2, 1)
ReplaceString(a$, "c", "6", 2, 1) : ReplaceString(a$, "d", "9", 2, 1)
ReplaceString(a$, "e", "7", 2, 1) : ReplaceString(a$, "f", "3", 2, 1)
ReplaceString(a$, "g", "2", 2, 1) : ReplaceString(a$, "h", "1", 2, 1)
ReplaceString(a$, "i", "6", 2, 1) : ReplaceString(a$, "j", "6", 2, 1)
ReplaceString(a$, "k", "5", 2, 1) : ReplaceString(a$, "l", "4", 2, 1)
ReplaceString(a$, "m", "9", 2, 1) : ReplaceString(a$, "n", "2", 2, 1)
ReplaceString(a$, "o", "0", 2, 1) : ReplaceString(a$, "p", "0", 2, 1)
ReplaceString(a$, "q", "8", 2, 1) : ReplaceString(a$, "r", "3", 2, 1)
ReplaceString(a$, "s", "7", 2, 1) : ReplaceString(a$, "t", "0", 2, 1)
ReplaceString(a$, "u", "1", 2, 1) : ReplaceString(a$, "v", "2", 2, 1)
ReplaceString(a$, "w", "5", 2, 1) : ReplaceString(a$, "x", "7", 2, 1)
ReplaceString(a$, "y", "8", 2, 1) : ReplaceString(a$, "z", "1", 2, 1)
ReplaceString(a$, "ä", "5", 2, 1) : ReplaceString(a$, "ö", "1", 2, 1)
ReplaceString(a$, "ü", "3", 2, 1) : ReplaceString(a$, "ß", "3", 2, 1)
ReplaceString(a$, "-", "1", 2, 1) : ReplaceString(a$, "@", "7", 2, 1)
ReplaceString(a$, "_", "1", 2, 1) : ReplaceString(a$, ",", "5", 2, 1)
ReplaceString(a$, ".", "9", 2, 1) : ReplaceString(a$, "/", "7", 2, 1)
ReplaceString(a$, ":", "3", 2, 1) : ReplaceString(a$, "+", "0", 2, 1)
ReplaceString(a$, "1", "3", 2, 1) : ReplaceString(a$, "6", "3", 2, 1)
ReplaceString(a$, "2", "1", 2, 1) : ReplaceString(a$, "7", "7", 2, 1)
ReplaceString(a$, "3", "1", 2, 1) : ReplaceString(a$, "8", "5", 2, 1)
ReplaceString(a$, "4", "9", 2, 1) : ReplaceString(a$, "9", "7", 2, 1)
ReplaceString(a$, "5", "3", 2, 1) : ReplaceString(a$, "0", "3", 2, 1)
Len(a$)
controlstr = ValQ(a$)
x.q = 1000000000000
y.q = x - controlstr
serial$ = StrQ(y.q)
ProcedureReturn serial$
EndProcedure
If OpenWindow(0, 200, 200, 240, 150, "CREATE SERIAL", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered )
If CreateGadgetList(WindowID(0))
StringGadget(0,20,20,200,20,"xy string")
StringGadget(1,20,50,200,20,"", #PB_String_Numeric)
ButtonGadget(2, 20, 80, 200, 20, "generate")
ButtonGadget(3, 20, 110, 200, 20, "test code")
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case 2
uservorgabe$ = GetGadgetText(0)
uservorgabe$ = Trim(uservorgabe$)
uservorgabe$ = uservorgabe$ + "abcdefghijk"
uservorgabe$ = ReplaceString(uservorgabe$," ","x")
serial$ = x(uservorgabe$)
SetGadgetText(1, serial$)
Case 3
serial$ = GetGadgetText(1)
a.q = ValQ(serial$)
a.q = (a + controlstr)/1000000000
If a.q = 1000
MessageRequester("Serial Control", "Test OK", #MB_OK|#MB_ICONINFORMATION)
Else
MessageRequester("Serial Control", "Test Failed", #MB_OK|#MB_ICONINFORMATION)
EndIf
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
EndIf
End