您的位置:首页 > 编程语言 > C#

C# 读取机器码,CPU序列号,生成注册码类

2013-01-21 00:10 363 查看
有些CPU不支持获取序列号。
获取strCpu=myObject.Properties["Processorid"].Value.ToString();时,请判断下返回是否为null,为null的话就说明cpu不支持。
获取集合对象属性,除非100%确定,否则不要直接访问属性。一旦返回空,就会报空引用错误

usingSystem.Management;//需要在项目中添加System.Management引用
namespaceECBC_CDKEY
{
publicclassSoftReg
{
///<summary>
///取得设备硬盘的卷标号
///</summary>
///<returns></returns>
publicstringGetDiskVolumeSerialNumber()
{
ManagementClassmc=newManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectdisk=newManagementObject("win32_logicaldisk.deviceid=\"c:\"");
disk.Get();
returndisk.GetPropertyValue("VolumeSerialNumber").ToString();
}
///<summary>
///获得CPU的序列号
///</summary>
///<returns></returns>
publicstringgetCpu()
{
stringstrCpu=null;
ManagementClassmyCpu=newManagementClass("win32_Processor");
ManagementObjectCollectionmyCpuConnection=myCpu.GetInstances();
foreach(ManagementObjectmyObjectinmyCpuConnection)
{
strCpu=myObject.Properties["Processorid"].Value.ToString();
break;
}
returnstrCpu;
}
///<summary>
///生成机器码
///</summary>
///<returns></returns>
publicstringgetMNum()
{
stringstrNum=getCpu()+GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号
stringstrMNum=strNum.Substring(0,24);//从生成的字符串中取出前24个字符做为机器码
returnstrMNum;
}
publicint[]intCode=newint[127];//存储密钥
publicint[]intNumber=newint[25];//存机器码的Ascii值
publicchar[]Charcode=newchar[25];//存储机器码字
publicvoidsetIntCode()//给数组赋值小于10的数
{
for(inti=1;i<intCode.Length;i++)
{
intCode[i]=i%9;
}
}
///<summary>
///生成注册码
///</summary>
///<returns></returns>
publicstringgetRNum()
{
setIntCode();//初始化127位数组
stringMNum=this.getMNum();//获取注册码
for(inti=1;i<Charcode.Length;i++)//把机器码存入数组中
{
Charcode[i]=Convert.ToChar(MNum.Substring(i-1,1));
}
for(intj=1;j<intNumber.Length;j++)//把字符的ASCII值存入一个整数组中。
{
intNumber[j]=intCode[Convert.ToInt32(Charcode[j])]+Convert.ToInt32(Charcode[j]);
}
stringstrAsciiName="";//用于存储注册码
for(intj=1;j<intNumber.Length;j++)
{
if(intNumber[j]>=48&&intNumber[j]<=57)//判断字符ASCII值是否0-9之间
{
strAsciiName+=Convert.ToChar(intNumber[j]).ToString();
}
elseif(intNumber[j]>=65&&intNumber[j]<=90)//判断字符ASCII值是否A-Z之间
{
strAsciiName+=Convert.ToChar(intNumber[j]).ToString();
}
elseif(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();
}
}
}
returnstrAsciiName;//返回注册码
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: