Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8702864
  • 博文数量: 1413
  • 博客积分: 11128
  • 博客等级: 上将
  • 技术积分: 14685
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 10:03
个人简介

follow my heart...

文章分类

全部博文(1413)

文章存档

2013年(1)

2012年(5)

2011年(45)

2010年(176)

2009年(148)

2008年(190)

2007年(293)

2006年(555)

分类:

2006-09-12 10:54:27

[点评:这是一种简单有效的方法,我们可以对这种方法的算法进行变通而列出其它的方法,不过这种方法还是可以被破解的.不过,在一般的应用上还是可以的,值得说明的是,这里获得的硬盘序列号并不是真正的硬盘序列号,而是某个盘符相应的序列号,硬盘序列号的获得另有方法.]
在模块中加入下列声明:
  Public Declare Function GetVolumeInformation Lib "kernel32" _
  Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, _
  ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, _
  lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
  lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, _
  ByVal nFileSystemNameSize As Long) As Long
  '得到某一磁盘分区的信息,如C:

  窗体代码如下:
  Option Explicit
  Private Regid, Localid As Long

  Private Sub CmdLocalID_Click()
  '根据C盘序列号得到原ID
  Dim Driver, VolName, Fsys As String
  Dim volNumber, MCM, FSF As Long
  Driver = "c:\"
  Dim res As Long
  res = GetVolumeInformation(Driver, VolName, 127, volNumber, MCM, FSF, Fsys, 127)
  'volNumber是C盘序列号
  Localid = volNumber / 2 + 123456789
  Text1.Text = Localid
  End Sub

  Private Sub CmdRegID_Click()
  '根据原ID算出注册ID
  If IsNumeric(Text1.Text) Then
Regid = CLng(Text1.Text) / 4 * 3 + 987654321
  Else
  'error
  End If
  Text2.Text = Regid
  End Sub

  Private Sub CmndCheckID_Click()
  '验证注册ID
  Dim Driver, VolName, Fsys As String
  Dim volNumber, MCM, FSF As Long
  Driver = "c:\"
  Dim res As Long
  res = GetVolumeInformation(Driver, VolName, 127, volNumber, MCM, FSF, Fsys, 127)
  Dim Tid As Long
  Tid = volNumber / 2 + 123456789
  If Regid = Tid / 4 * 3 + 987654321 Then
  MsgBox "正确!"
  Else
  MsgBox "错误!"
  End If
  End Sub

  为便于演示,我在窗体上用了两个文本框三个按钮,请根据情况灵活使用,可以在用户端算出原ID,发给你,你算出注册ID再发给用户,验证当然是在用户端啦。ID算法很简单,只作示范。此注册ID只能在这一台机器上使用,对于非高手用户来说是足够啦。
注:如用户格式化C:盘后需重新获得ID。
阅读(1671) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~