3.getMNum()方法
getMNum()方法用來從得到的硬盤標(biāo)識號和CPU序列號中取出一定的位數(shù)作為機(jī)器碼,其實現(xiàn)代碼如下:
例程07 代碼位置:光盤\TM\01\VWMS\VWMS\CommonClass\SoftReg.cs
//生成機(jī)器碼
public string getMNum()
{
string strNum = getCpu() + GetDiskVolumeSerialNumber(); //獲得CPU和硬盤序列號
string strMNum = strNum.Substring(0,24); //從生成的字符串中取出前個字符作為機(jī)器碼
return strMNum;
}
public int[] intCode = new int[127]; //存儲密鑰
public int[] intNumber = new int[25]; //存機(jī)器碼的ASCII值
public char[] Charcode = new char[25]; //存儲機(jī)器碼字
public void setIntCode() //給數(shù)組賦值小于10的數(shù)
{
for (int i = 1; i < intCode.Length; i++)
{
intCode[i] = i % 9;
}
}
4.getRNum()方法
getRNum()方法用來根據(jù)得到的機(jī)器碼生成注冊碼,其實現(xiàn)代碼如下:
例程08 代碼位置:光盤\TM\01\VWMS\VWMS\CommonClass\SoftReg.cs
//生成注冊碼
public string getRNum()
{
setIntCode(); //初始化為數(shù)組
for (int i = 1; i < Charcode.Length; i++) //把機(jī)器碼存入數(shù)組中
{
Charcode[i] = Convert.ToChar(this.getMNum().Substring(i - 1, 1));
}
for (int j = 1; j < intNumber.Length; j++) //把字符的ASCII值存入一個整數(shù)組中
{
intNumber[j] = intCode[Convert.ToInt32(Charcode[j])] + Convert.ToInt32(Charcode[j]);
}
string strAsciiName = ""; //用于存儲注冊碼
for (int j = 1; j < intNumber.Length; j++)
{
if (intNumber[j] >= 48 && intNumber[j] <= 57) //判斷字符ASCII值是否在48~57之間
{
strAsciiName += Convert.ToChar(intNumber[j]).ToString();
}
else if (intNumber[j] >= 65 && intNumber[j] <= 90) //判斷字符ASCII值是否在A~Z之間
{
strAsciiName += Convert.ToChar(intNumber[j]).ToString();
}
else if (intNumber[j] >= 97 && intNumber[j] <= 122) //判斷字符ASCII值是否在a~z之間
{
strAsciiName += Convert.ToChar(intNumber[j]).ToString();
}
else //判斷字符ASCII值不在以上范圍內(nèi)
{
if (intNumber[j] > 122) //判斷字符ASCII值是否大于z
{
strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString();
}
else
{
strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString();
}
}
}
return strAsciiName;
}
注意:由于本實例中用到了ManagementClass、ManagementObject和ManagementObjectCollection類,所以需要在命名空間區(qū)域添加System.Management命名空間。