zoukankan      html  css  js  c++  java
  • C# 读取机器码,CPU序列号,生成注册码类

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

    using System.Management;//需要在项目中添加System.Management引用
     
    namespace ECBC_CDKEY
    {
        public class SoftReg
        {
            /// <summary>
            /// 取得设备硬盘的卷标号
            /// </summary>
            /// <returns></returns>
            public string GetDiskVolumeSerialNumber()
            {
                ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
                disk.Get();
                return disk.GetPropertyValue("VolumeSerialNumber").ToString();
            }
     
            /// <summary>
            /// 获得CPU的序列号
            /// </summary>
            /// <returns></returns>
            public string getCpu()
            {
                string strCpu = null;
                ManagementClass myCpu = new ManagementClass("win32_Processor");
                ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
                foreach (ManagementObject myObject in myCpuConnection)
                {
                    strCpu = myObject.Properties["Processorid"].Value.ToString();
                    break;
                }
                return strCpu;
            }
            
            /// <summary>
            /// 生成机器码
            /// </summary>
            /// <returns></returns>
            public string getMNum()
            {
                string strNum = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号
                string strMNum = strNum.Substring(0, 24);//从生成的字符串中取出前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;
                }
            }
            
            /// <summary>
            /// 生成注册码
            /// </summary>
            /// <returns></returns>
            public string getRNum()
            {
                setIntCode();//初始化127位数组
                string MNum = this.getMNum();//获取注册码
                for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中
                {
                    Charcode[i] = Convert.ToChar(MNum.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值是否0-9之间
                    {
                        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;//返回注册码
            }
        }
    }
  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/jx270/p/2869116.html
Copyright © 2011-2022 走看看