安装序列号一般是以什么为基础生成的

ybwen:
    winnt4.0 sp5
    c++ builder 4.0,installshield
    我在制作安装程序时,想生成一个安装序列号,请问序列号一般是以什么为基础生成的,使用的是什么算法?

    这并没有一个统一的算法,一般可以根据个人喜好。绝大多数安装序列号都与用户的硬盘分区序列号有关(QA000894 "如何调用GetVolumeInformation获得磁盘序列号")。也有的安装程序还检查CPU类型(比如将486定为1,Pentium定为2等等)、网卡等。然后,对得到的这些序号进行一些算术运算或字符变换。下面是某软件的序列号产生程序。
    char sTable[]="XR4JYW95G7K26L3Q";
    
// Get volume serial number
    
GetVolumeInformation( "c://", (LPSTR)NULL, 0,
    
&dwVolumeSerialNumber, &dwDummy1,
    
&dwDummy2, (LPSTR)NULL, 0);
    
    
// Caculate the serial number
    
dwVolumeSerialNumber2 = (dwVolumeSerialNumber & 0xff)
    
^ (dwVolumeSerialNumber >> 8);
    
    
sCode[7] = sTable[(dwVolumeSerialNumber2 >> 20) ^ 1];
    
sCode[5] = sTable[(dwVolumeSerialNumber2 >> 16 & 0xf) ^ 1];
    
sCode[12] = sTable[(dwVolumeSerialNumber2 >> 12 & 0xf) ^ 1];
    
sCode[6] = sTable[(dwVolumeSerialNumber2 >> 8 & 0xf) ^ 7];
    
sCode[9] = sTable[(dwVolumeSerialNumber2 >> 4 & 0xf) ^ 7];
    
sCode[8] = sTable[(dwVolumeSerialNumber2 & 0xf) ^ 7];
    
sCode[13] = sTable[(dwVolumeSerialNumber2 >> 20) ^ 1
    
^ (dwVolumeSerialNumber2 & 0xf) ^ 7];
    
sCode[14] = sTable[(dwVolumeSerialNumber2 >> 20) ^ 1
    
^ (dwVolumeSerialNumber2 & 0xf) ^ 7 ^ 0xb];
    
wsprintf(sBuff, "Disk serial number: %x-%x/r/n"
    
"Sorbet serial number: %s",
    
HIWORD(dwVolumeSerialNumber),
    
LOWORD(dwVolumeSerialNumber),
    
sCode);
    
SetDlgItemText(hwndDlg, IDC_MSG, sBuff);
    

此问题由李海回答。

回答:

(原文: http://www.china-askpro.com/msg20/qa51.shtml) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值