您可以使用注册机。它们是一种糟糕的安全方法,因为它们可以(有点容易)被逆向工程(例如,99% 的“许可”软件)。但是,如果您没有很多用户,这不是问题。
Gui, 2:Add, Edit, w300 vName2, name
Gui, 2:Add, Edit, w300 vCode2, code
Gui, 2:Add, Button, w300 gSubmit2, Submit
Gui, 2:Add, Button, w300 gTestCode, Test Code ; Remove this button in production
; Run this when they press the "Enter Donor Key" button elsewhere
Gui, 2:Show,, Enter Donor Key
return
TestCode: ; Remove this label in production
Gui, 2:submit, nohide
GuiControl,, Code2, % GetCodeFromName(name2)
return
GetCodeFromName(name) {
len := StrLen(name)
sum := 0
loop %len%
{
sum += Asc(SubStr(name, A_Index, 1))
}
Random,, %sum%
outs := ""
loop 15
{
Random, rand, 1, 26
outs .= Chr(64 + rand)
}
return outs
}
CheckCode(name, code) {
return GetCodeFromName(name) = code
}
Submit2:
Gui, 2:Submit
if CheckCode(name2, code2)
MsgBox Rodger that, captain!
else
MsgBox Invalid
return
2GuiClose:
ExitApp
您应该将自己的算法放入 中GetCodeFromName
,但这允许您将 ID/代码对传递给您的捐赠者。它可能是他们的电子邮件地址、名字等。它区分大小写,但将 StrLower 放在那里可以解决这个问题。
算法描述(以防它有助于修改它):名称的字符代码加在一起产生一个很大的数字。该数字用作随机数生成器的种子。这意味着相同的名称给出相同的种子,即给出相同的随机数序列。根据种子,选择 15 个大写字母(ASCII 为 65 到 90)。那是你的代码。相同的名称-> 相同的代码。