热情软件屋

 

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


编号:QA001951
建立日期: 1999年11月3日 最后修改日期:1999年11月3日
所属类别:

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);
    

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio