【C#】获取机器码MachineCode

需求:机器码可以用于校验用户是否用的同一台电脑登录,比如在别的机器上登录时做强制下线(踢人下线)。通常在用户注册时,计算一次用户的机器码跟随注册信息一起发送给服务器。

机器码的作用看百度百科:

这里写图片描述

定义规则:
机器码 = CPU序列号 + 硬盘ID + 网卡硬件地址

public class MachineCode
{

    static MachineCode machineCode;

    public static string GetMachineCodeString()
    {
        string machineCodeString = string.Empty;
        if (machineCode == null)
        {
            machineCode = new MachineCode();
        }
        machineCodeString = "PC." + machineCode.GetCpuInfo() + "." +
                            machineCode.GetHDid() + "." +
                            machineCode.GetMoAddress();
        return machineCodeString;
    }

    ///   <summary> 
    ///   获取cpu序列号     
    ///   </summary> 
    ///   <returns> string </returns> 
    public string GetCpuInfo()
    {
        string cpuInfo = "";
        try
        {
            using (ManagementClass cimobject = new ManagementClass("Win32_Processor"))
            {
                ManagementObjectCollection moc = cimobject.GetInstances();

                foreach (ManagementObject mo in moc)
                {
                    cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
                    mo.Dispose();
                }
            }
        }
        catch (Exception)
        {
            throw;
        }
        return cpuInfo.ToString();
    }

    ///   <summary> 
    ///   获取硬盘ID     
    ///   </summary> 
    ///   <returns> string </returns> 
    public string GetHDid()
    {
        string HDid = "";
        try
        {
            using (ManagementClass cimobject1 = new ManagementClass("Win32_DiskDrive"))
            {
                ManagementObjectCollection moc1 = cimobject1.GetInstances();
                foreach (ManagementObject mo in moc1)
                {
                    HDid = (string)mo.Properties["Model"].Value;
                    mo.Dispose();
                }
            }
        }
        catch (Exception)
        {

            throw;
        }
        return HDid.ToString();
    }

    ///   <summary> 
    ///   获取网卡硬件地址 
    ///   </summary> 
    ///   <returns> string </returns> 
    public string GetMoAddress()
    {
        string MoAddress = "";
        try
        {
            using (ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"))
            {
                ManagementObjectCollection moc2 = mc.GetInstances();
                foreach (ManagementObject mo in moc2)
                {
                    if ((bool)mo["IPEnabled"] == true)
                        MoAddress = mo["MacAddress"].ToString();
                    mo.Dispose();
                }
            }
        }
        catch (Exception)
        {
            throw;
        }
        return MoAddress.ToString();
    }
}

原文地址:

http://group.cnblogs.com/topic/32913.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值