获取唯一ID号的终极方法(50分)

  • 主题发起人 主题发起人 zcm1975117
  • 开始时间 开始时间
Z

zcm1975117

Unregistered / Unconfirmed
GUEST, unregistred user!
各位兄弟:
为了注册软件,我想获取用户机器上的一个唯一的号码作为标识,但我看过一些资料,
如果获取硬盘的物理ID,但有的硬盘出厂时没有,如三星;如果用机器的网卡的MAC地址,
但可以修改此地址;如果用主板的ID或者CPU的ID时,有的一批货是相同的号码。
到底有什么号码是唯一的呢?请大家帮助呀,最好有实现代码。
 
CPU的ID不会有相同的哦?即使是同一批货!!!!不可能!!!
 
用硬盘的物理 ID 吧,如果是三星的硬盘,其返回的系列号为空值,你就用一个其它的
来代替就好了,毕竟用三星硬盘的人很少。
 
To HeyTommy: CPU 同样一批货 ID 号确实都是相同的, 我试过, 因为我这里有三台同时配
置的计算机, CPU是同一型号同一批货, ID号相同. 你有什么办法得出不同的ID号呢?
 
to:IamWLJ888:

还真有这么回事情啊????

按道理来说INTEL和AMD生产得芯片的序列号是全球唯一的啊!!

to zcm1975117:
既然cpu的序列号有相同的,硬盘的序列号可能不存在,那么你是否可以用BIOS的序列号呢?
我想这个相同的可能没了吧?如果仍然有,我想就只好用他们的组合方式了!!
 
to HeyTommy:你说的没错,的确也有相同的!
 
用网卡的,绝不会重复.
 
to leeChange:但是可以通过修改注册表来修改网卡的MAC哟!
 
用网卡的就行,微软自己的com规范中的ID也是由网卡产生的!
 
硬盘的序列号是肯定存在的。不是我们在操作系统下能见的VOL
而是必须用程序才能读出的。它是一串数字。
这是我的注册里的一段代码。可以取序列号然后转字符串。你可以试一下

var
DSSER,dsser1,dsser2,dsser3:string;
mp,i,lc:integer;
a1,s:array [0..25] of string;
SerialNum : dword; aX, bX : dword; Buffer : array [0..255] of char;
begin

CSER:='';
while CSER='' do
begin
IF GetVolumeInformation('c:/', Buffer, SizeOf(Buffer), @SerialNum, aX, bX, nil, 0) THEN
CSER:=IntToStr(SerialNum);
end;
 
切!老硬盘就没有序列号
 
没有终极的唯一ID。BIOS号也有重的。
 
没有办法的。
 
to LeeChange:

虽然说MAC地址唯一,但如果用户因为网卡坏了换了一块,那你就不准别人用了吗?

我觉得应该用它们的组合,另外再加上一个认证码,这个认证码可以是你自己的某些信息,
诸如你系统时间啊,,什么的,,就看你了,,如果这样都还有相同的,,那几率已经是很小了,

至少是小数点后要有好大一堆 0 了,,,

说句理论的话:世界上是没绝对的!
 
to 一个过客, 能装WINDOWS的硬盘都有序列号
老硬盘我也有,10M的,40M的
 
用GUID啊,那可能是最接近唯一标识的东西了,

让用户反馈给你他安装程序时所产生的GUID

然后你自己定义一个算法,返回一个与此GUID相应的序列号就可以了
 
有趣,,,,


 
>>能装WINDOWS的硬盘都有序列号
你到这里看看,http://member.netease.com/~dingkai/ide.htm,
注意最后一段话。
 
你们又不是搞全球战略的,个别cpu,硬盘或网卡的ID号相同又没什么了不起的,你无非是想给软件加密,难道会这么巧,两个买同一批硬件的人,都买你的程序,而且用同样的注册名,金庸也不会把故事写得这么巧。
 
后退
顶部