思路是:
创新互联建站专注于凤县网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供凤县营销型网站建设,凤县网站制作、凤县网页设计、凤县网站官网定制、小程序制作服务,打造凤县网络公司原创品牌,更为您提供凤县网站排名全网营销落地服务。
读取电脑硬件的信息,用随机数加工这些信息后在注册表中做个记录,用这个记录生成注册码送回给你,你按特定的方法生成序列号,你的小程序收到序列号后还原成数据,数据比较注册表中的记录,如果正确就加入第二部分注册的信息完成注册.你的程序每次打开时,先比对硬件信息-第一注册信息-第二注册信息,看这三者是否统一,不统一的就是使用期软件.
也可以省了第一注册信息,直接发硬件信息给你生成序列号,其他的相同.
Private Function 硬盘序列号() As String
Try
Dim myInfo As Microsoft.Win32.RegistryKey = My.Computer.Registry.LocalMachine.OpenSubKey("HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\Scsi Bus 1\Target Id 0\Logical Unit Id 0")
硬盘序列号 = Trim(myInfo.GetValue("SerialNumber"))
Catch
Try
Dim myInfo As Microsoft.Win32.RegistryKey = My.Computer.Registry.LocalMachine.OpenSubKey("HARDWARE\DEVICEMAP\Scsi\Scsi Port 1\Scsi Bus 1\Target Id 0\Logical Unit Id 0")
硬盘序列号 = Trim(myInfo.GetValue("SerialNumber"))
Catch
硬盘序列号 = ""
End Try
End Try
End Function
试下,如果返回为空,则表示失败。
在本机win8win8.1有效,不过好像在有些机器上没用。
添加listbox1,label1,command1
Public Class Form1
Dim N(10) As Integer
'生成随机数
Private Sub CreatRand()
Dim I As Integer
Dim Strarr As String
Strarr = ""
ListBox1.Items.Clear()
Dim R As New System.Random
For I = 0 To 9
N(I) = R.Next(30, 100)
ListBox1.Items.Add(Str(N(I)))
Strarr = Strarr Str(N(I)) " "
Next
'添加标签的横向数字序列
Label1.Text = Strarr
End Sub
'获取最大值
Private Function GetMax() As Integer
Dim I As Integer
Dim intMax As Integer
intMax = 0
For I = 0 To 9
intMax = IIf(intMax N(I), intMax, N(I))
Next
Return intMax
End Function
'获取最小值
Private Function GetMin() As Integer
Dim I As Integer
Dim intMin As Integer
intMin = 101
For I = 0 To 9
intMin = IIf(intMin N(I), intMin, N(I))
Next
Return intMin
End Function
'获取平均值
Private Function GetAve() As Single
Dim I As Integer
Dim Sum As Integer
Sum = 0
For I = 0 To 9
Sum = Sum + N(I)
Next
Return Sum / 10
End Function
'生成随机数,显示各种值
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call CreatRand()
MsgBox("最大值=" Str(GetMax()) ",最小值=" Str(GetMin()) ",平均值=" Str(GetAve()))
End Sub
End Class
Rnd[(number)]
number
的值决定了
Rnd
生成随机数的方式
如果
number
的值
Rnd
生成
小于
每次都使用
number
作为随机数种子得到的相同结果。
大于
序列中的下一个随机数。
等于
最近生成的数。
省略
序列中的下一个随机数。
====================
先讨论没有加randomize时
X小于0
如
rnd(-1)
以-1为种的随机数永远相同
X大于0
如
rnd(1)
系统会先生成随机数列表
有N个随机数
你每执行一次rnd(1)就获取列表中下一个随机数
比如有这么个列表
程序开始时
得到0.7055475
执行第二次rnd(1)得到0.533424
第三次0.5795186
你关闭程序重新打开
第一次得到还是0.7055475
.7055475
.533424
.5795186
.2895625
.301948
而你说的X0
X0没差别
是错的
Rnd(1)
Debug.Print
Rnd(-2)
和
Debug.Print
Rnd(-2)
Rnd(1)
结果是不一样的
X等于0
最近生成的数
一般为科学型数值
这个值也是不变的
rnd(x)
省略x不写
就和X0
效果一样
=========================
Randomize
用
number
将
Rnd
函数的随机数生成器初始化,该随机数生成器给
number
一个新的种子值。如果省略
number,则用系统计时器返回的值作为新的种子值。
如果没有使用
Randomize,则(无参数的)Rnd
函数使用第一次调用
Rnd
函数的种子值。
注意
若想得到重复的随机数序列,在使用具有数值参数的
Randomize
之前直接调用具有负参数值的
Rnd。使用具有同样
number
值的
Randomize
是不会得到重复的随机数序列的。
一般在使用rnd获取随机数
都是
randomize
int(rnd*(上限-下限+1)+下限)
这2个函数的X都是省略不写
Private Sub Form_Load()
Dim A As String
Dim B As String
A = InputBox("请输入碱基序列:", "输入!")
A = UCase(A) '变成大写
Rem 碱基互补配对
A = Replace(A, "C", "1")
A = Replace(A, "T", "2")
A = Replace(A, "G", "3")
A = Replace(A, "A", "4")
A = Replace(A, "1", "G")
A = Replace(A, "2", "A")
A = Replace(A, "3", "C")
A = Replace(A, "4", "T")
Rem 反向
For i = Len(A) - 1 To 1 Step -1
B = B Mid(A, i, 1)
Randomize()的作用是初始化随机数种子,
它有个带参数的版本
Randomize(double seed)
seed是产生随机数序列的一个标号,如果你不调用Randomize改变这个标号,默认使用的是同一个序列,所以每次你启动程序生成的随机数都是相同的,不带参数的Randomize等价于Randomize(Timer),也就是使用系统时钟作为随机数种子
因为这个值随程序启动或调用每次都不会相同,所以能实现产生不同的随机数