如何在Delphi中生成唯一的机器序列号?

时间:2010-06-05 20:47:14

标签: delphi serial-number

我有疑问如何在Delphi中生成唯一的机器序列号?我尝试使用主板或处理器的ID来做到这一点,但遗憾的是它不幸得到了支持。分区序列号等脱落,因为它在格式化后会发生变化。我正在寻找格式化后没有改变的东西。有人有什么想法吗?

7 个答案:

答案 0 :(得分:6)

JCL内部,有几个函数对此主题非常有用:

function CPUID: TCpuInfo;
function GetMacAddresses(const Machine: string; const Addresses: TStrings): Integer;
function GetVolumeSerialNumber(const Drive: string): string;
function GetBIOSName: string;

答案 1 :(得分:4)

你所追求的实际上是某种“硬件指纹”,而不是“序列号”。这种方法的问题在于它不是100%可靠。证明:Microsoft无法找到将OEM软件正确限制到任何一台计算机的方法,您可以在一段时间后在新计算机上重新安装OEM许可证!一旦你同意不可能有一个完美的解决方案,你可以看看你的选择,并尝试获得足够好的东西。

对于我的应用程序,我正在根据GetSystemInfo,GetVolumeInformation和(对于'C:'分区)返回的信息创建指纹,以及从HKLM \ HARDWARE选择的注册表项(实际上有很多注册表项,除了usb之外的所有内容) ,键盘和鼠标的东西)。我正在从注册表中读取硬件信息,因为Windows应用程序无法真正直接访问硬件(DOS风格的方法无法工作),并且因为我没有时间找出确定硬件相关信息的方法许多不同的设备。

我的方法有以下缺点:

  • 使用由Format设置的分区序列号。格式会明显改变指纹。
  • 使用有关已安装驱动程序的信息。更新驱动程序实际上可能会更改指纹!将卡从一个PCI端口移动到另一个PCI端口可能会更改指纹。

尽管如此,即使考虑到所有这些不断变化的信息,我也会遇到冲突:像1/1000计算机一样!这里有几个因素在起作用:

  • Big OEM使用相同的硬件构建许多计算机。他们还克隆硬盘驱动器以加快软件安装,因此不同的PC可能会获得相同的分区序列号。
  • 我正在用所有这些信息构建一个非常简短的哈希值,足够短,以便人们可以通过手机阅读它而不会出现太多错误。

此系统适用于我,但如果您希望在重新安装计算机后重新识别计算机,则该系统无效。

答案 2 :(得分:3)

您可以在Windows上测试提取多个组件信息的GLibWMI 它是免费的,包括来源。您可以在my WebSourceforge中找到它。

alt text http://img175.imageshack.us/img175/1250/imagen344.png

包括BIOSInfo,DiskInfo,ProcessorInfo,...

的组件

使用这三个组件,您可以获得以下信息:

alt text http://img690.imageshack.us/img690/6006/imagen349.png

你可以找到GenericDemo的BIN / EXE(所有组件)here;您可以测试可以使用此组件检索的所有信息。

答案 3 :(得分:1)

在旧的DOS时代,我遇到了类似的问题。我发现安装硬件的ROM即。视频卡,磁盘控制器seriel端口等可以直接访问,因为它们是内存映射的。这意味着我能够创建已安装硬件的列表,并使用它来生成“序列号”,该序列号唯一地标识每台计算机(直到硬件设置被更改)。我相信今天也有类似的东西。

如果您想使用此方法,请查看http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map

此致

答案 4 :(得分:1)

通常使用(a)网卡的MAC地址,有几种方法可以查询mac地址(在Delphi中),但最简单/最干净的方法可能就是使用GetAdaptersInfo API。

答案 5 :(得分:1)

这是一个简单的解决方案

  • 生成GUID
  • 将Guid值保存在注册表中
  • 使用guid的值作为序列号

如果你担心安全使用了 哈希(Guid +一些秘密数据)

答案 6 :(得分:0)

我倾向于同意“它无法完成”阵营。至少不是100%,但它可以做得“足够好”以保持普通用户的排队。

如果可以做到那么它可能已经完成了。您是否检查过Torry的Delpi300等(甚至可能是sourceforge,尽管您可能需要翻译成Delphi)。

http://www.google.com.sg/search?hl=en&source=hp&q=How+to+generate+unique+serial+number+of+machine+in+Delphi实际上看起来很有希望