下面的 GetCPUID 兼容性如何?请大家测试 (用于生成一机一码) (200分)

  • 主题发起人 主题发起人 gentlesoft
  • 开始时间 开始时间
G

gentlesoft

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的 GetCPUID 兼容性如何?
type
TCPUID = array[1..4] of Longint;
function GetCPUID : TCPUID;
assembler;
register;
//得到CPU序列号
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Resukt}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
end;

请各位测试一下,是不是唯一值。
测试方法:
新建一个项目,放置一个 TEdit 和一个 TButton,在 Button.OnClick 中拷贝如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var
CPUID: TCPUID;
begin
CPUID := GetCPUID;
Edit1.Text := IntToStr(CPUID[1]) +
IntToStr(CPUID[2]) +
IntToStr(CPUID[3]) +
IntToStr(CPUID[4]);
end;

多点击几次 Button,看看 Edit1 中的值是否有变化,如果没有,则说明工作正常。
如果有变化,则说明该函数不正常。
我已经测试了以下 CPU,结果都是正确的。
INTEL C4 1.7G
INTEL Celeron 500MHz
INTEL Celeron 800MHz
如果您愿意测试,请把测试结果贴在下面:
CPU 型号:
测试结果:正常/不正常
 
这段代码......
 
不具有通用性。PIII以前的计算机没有ID,而且AMD的CPU也没有ID。AMD可是有20%的CPU占有率。
 
还可以 ,能测试出来
 
这么说用 CPUID 生成注册是不行的了。用硬盘序列号好像也不行,在 WIN9X 下要用 VXD。
那么用 BIOS ID 如何?
在 Windows 优化大师的处理器和 BIOS 选项中有一项:全球唯一序列号。这项是每台电脑唯一的吗?如果是,该如何得到这个序列号。
谁有比较好用的一机一注册码解决方案?
 
centrino
正常
 
全球唯一序列号 应该是GUID
DELPHI中有相当于SQLSERVER2000中地NEWID()函数
 
一机一注册码不好弄:
1:CPU序列号,并不是每颗CPU都有一个唯一的序列号,CPU试每种型号一个序列号,其实可以认为是CPU型号号码。
2:硬盘序列号,每块硬盘都有一个唯一序列号,但是三星硬盘没有序列号。因为三星硬盘不多见,总体来说硬盘序列号还是比较好用的。
3:网卡序列号,全球唯一,每卡毕有,但每台计算机未必装网卡,有的还可能装有多卡,不好用。
我使用的方法:先取硬盘序列号,如没有,再取CPU序列号,如还没有那就不加限制,让他使。
 
可以象WINXP一样,通过各种信息混合后生成唯一码。
举个例子比如说:
000000-abtgohho-dallkjiu-12890-!jkliiljl
第一节表示CPU序列号,第二节表示网卡的序列号,第三节表示硬盘序列号,第四节......
如果设备不存在或者设备没有序列号可以用就用0000000添满
 
混合的方法也有不好的地方,那就是用户换了CPU或网卡或硬盘都要重新注册,真是麻烦啊。
BIOS 序列号怎么样?我发现我的电脑上的 BIOS 码挺长的。是不是每台 PC 都有一个 BIOS 序列号?
 
帮你顶下,测试正常
 
谢谢参与,贴上测试结果的时候请告知 CPU 型号。
 
混合的方法也有不好的地方,那就是用户换了CPU或网卡或硬盘都要重新注册,真是麻烦啊。
BIOS 序列号怎么样?我发现我的电脑上的 BIOS 码挺长的。是不是每台 PC 都有一个 BIOS 序列号?
------------------
可以借鉴微软WINXP的混合方式
例如
000000-abtgohho-dallkjiu-12890-!jkliiljl。
有几个以上的段不符合才会视为不正确
 
按照 wr960204 的方法解决了,CPU+硬盘,感谢各位。
 
后退
顶部