生成序列号

时间:2009-12-22 16:13:39

标签: vb6 random activation

所以我正在为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 ++解决方案也可以正常工作,因为我可以相对轻松地移植它们。社区帮助总是非常感谢!

3 个答案:

答案 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