所以我正在为VB6项目创建一个Activation类,我遇到了大脑放屁。我已经设计了如何以下列方式生成此特定产品的序列号。
XXXX-XXXX-XXXX-XXXX
如果我知道允许我理解带有数字组的代码的匹配文档,那么每组数字都代表我可以阅读的数据。因此,例如,第一组可以表示产品销售给客户的月份。但我不能让1月份的所有序列号都以相同的四位开头,因此需要进行一些内部数学来计算这个值。我得出的是:
A B C D =序列号第一组中的数字 (A + B) - (C + D)=#
现在#将与Hex值表相关,然后表示产品销售的月份。有点像...
1 - 1月
2 - 2月
3 - 3月
...
B - 11月
C - 12月我的问题在于 - 如果我知道我需要总数等于B(11)那么我究竟可以向后编码以生成(A + B) - (C + D)= B(11)??我知道这是一个非常简单的等式 - 但是我刚刚碰到的东西似乎无法开始正确的方向。我不是要求完整的代码处理,而只是推动。如果你有一个完整的解决方案,想要分享,我总是愿意学习更多。
我在VB6编码,但VB.NET,C#,C ++解决方案也可以正常工作,因为我可以相对轻松地移植它们。社区帮助总是非常感谢!
答案 0 :(得分:2)
没有单一的解决方案(你有一个包含四个变量的等式)。你必须选择一些随机数。这是一个有效的(在Python中,但你明白了):
from random import randint
X = 11 # the one you're looking for
A_plus_B = randint(X, 30)
A = randint(max(A_plus_B - 15, 0), min(A_plus_B, 15))
B = A_plus_B - A
C_plus_D = A_plus_B - X
C = randint(max(C_plus_D - 15, 0), min(C_plus_D, 15))
D = C_plus_D - C
我假设你允许十六进制数字;如果您只想要0到9,请将15乘以9,将30替换为18。
答案 1 :(得分:0)
好的 - 笔和纸始终是解决方案......所以这里......
试图找到(A + B) - (C + D)的值应该等于某个称为X的数字。首先我知道我想要HEX值以便将我限制为0-F或0-15 。从那里我需要一个更好的起始位置,所以我将生成一个代表(A + B)总和的随机数,我们称之为Y,但不低于值X.然后从该数字Y值中减去X来确定将代表(C + D)的值,我们将其称为Z.使用类似的逻辑将Y和Z分解为两个数字,每个数字可以表示(A + B)= Y和(C + D) )= Z.在完成所有说完之后我应该有一个很好的随机创建4个数字,当插入我的方程时将返回一个合适的结果。
只需要通过大脑放屁。
答案 2 :(得分:0)
这可能看起来有些过时,并且它可能不会带你去你想去的地方。但是,它应该为您的关键字符串生成更广泛的值:
Option Explicit
Private Function MonthString(ByVal MonthNum As Integer) As String
'MonthNum: January=1, ... December=12. Altered to base 0
'value for use internally.
Dim lngdigits As Long
MonthNum = MonthNum - 1
lngdigits = (Rnd() * &H10000) - MonthNum
MonthString = Right$("000" & Hex$(lngdigits + (MonthNum - lngdigits Mod 12)), 4)
End Function
Private Function MonthRecov(ByVal MonthString As String) As Integer
'Value returned is base 1, i.e. 1=January.
MonthRecov = CInt(CLng("&H" & MonthString) Mod 12) + 1
End Function
Private Sub Form_Load()
Dim intMonth As Integer
Dim strMonth As String
Dim intMonthRecov As Integer
Dim J As Integer
Randomize
For intMonth = 1 To 12
For J = 1 To 2
strMonth = MonthString(intMonth)
intMonthRecov = MonthRecov(strMonth)
Debug.Print intMonth, strMonth, intMonthRecov, Hex$(intMonthRecov)
Next
Next
End Sub