3.getMNum()方法
getMNum()方法用来从得到的硬盘标识号和CPU序列号中取出一定的位数作为机器码,其实现代码如下:
例程07 代码位置:光盘\TM\01\VWMS\VWMS\CommonClass\SoftReg.cs
//生成机器码
public string getMNum()
{
string strNum = getCpu() + GetDiskVolumeSerialNumber(); //获得CPU和硬盘序列号
string strMNum = strNum.Substring(0,24); //从生成的字符串中取出前个字符作为机器码
return strMNum;
}
public int[] intCode = new int[127]; //存储密钥
public int[] intNumber = new int[25]; //存机器码的ASCII值
public char[] Charcode = new char[25]; //存储机器码字
public void setIntCode() //给数组赋值小于10的数
{
for (int i = 1; i < intCode.Length; i++)
{
intCode[i] = i % 9;
}
}
4.getRNum()方法
getRNum()方法用来根据得到的机器码生成注册码,其实现代码如下:
例程08 代码位置:光盘\TM\01\VWMS\VWMS\CommonClass\SoftReg.cs
//生成注册码
public string getRNum()
{
setIntCode(); //初始化为数组
for (int i = 1; i < Charcode.Length; i++) //把机器码存入数组中
{
Charcode[i] = Convert.ToChar(this.getMNum().Substring(i - 1, 1));
}
for (int j = 1; j < intNumber.Length; j++) //把字符的ASCII值存入一个整数组中
{
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值不在以上范围内
{
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类,所以需要在命名空间区域添加System.Management命名空间。