机器码用于软件使用权限的校验等等。

using System;
using System.IO;
using System.Text;
using System.Management;
using System.Diagnostics;
using System.Runtime.InteropServices;public static class RegistHelper
{/// <summary>/// 取得设备硬盘的卷标号/// </summary>/// <returns></returns>public static 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 static 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 static string getMNum(){string strNum = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号string strMNum = strNum.Substring(0, 24);//从生成的字符串中取出前24个字符做为机器码return strMNum;}public static int[] intCode = new int[127];//存储密钥public static int[] intNumber = new int[25];//存机器码的Ascii值public static char[] Charcode = new char[25];//存储机器码字public static void setIntCode()//给数组赋值小于10的数{for (int i = 1; i < intCode.Length; i++){intCode[i] = i % 9;}}/// <summary>/// 生成注册码/// </summary>/// <returns></returns>public static string getRNum(){setIntCode();//初始化127位数组string MNum = 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;//返回注册码}
}/// <summary>
/// Hardware_Mac 的摘要说明。
/// </summary>
internal class clsHardInfo
{/// <summary>/// 取CPU编号/// </summary>/// <returns></returns>internal string GetCpuID(){try{ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection moc = mc.GetInstances();string strCpuID = null;foreach (ManagementObject mo in moc){strCpuID = mo.Properties["ProcessorId"].Value.ToString();break;}return strCpuID;}catch{return "";}}/// <summary>/// 获取硬盘ID/// </summary>/// <returns></returns>internal string GetDiskID(){try{//获取硬盘ID String HDid = "";ManagementClass mc = new ManagementClass("Win32_DiskDrive");ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){HDid = (string)mo.Properties["Model"].Value;}moc = null;mc = null;return HDid;}catch{return "";}finally{}}/// <summary>/// 取第一块硬盘编号 /// </summary>/// <returns></returns>internal string GetHardDiskID(){try{ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");string strHardDiskID = null;foreach (ManagementObject mo in searcher.Get()){strHardDiskID = mo["SerialNumber"].ToString().Trim();break;}return strHardDiskID;}catch (Exception ex){throw (ex);//return "";}}internal enum NCBCONST{NCBNAMSZ = 16, /* absolute length of a net name */MAX_LANA = 254, /* lana's in range 0 to MAX_LANA inclusive */NCBENUM = 0x37, /* NCB ENUMERATE LANA NUMBERS */NRC_GOODRET = 0x00, /* good return */NCBRESET = 0x32, /* NCB RESET */NCBASTAT = 0x33, /* NCB ADAPTER STATUS */NUM_NAMEBUF = 30, /* Number of NAME's BUFFER */}[StructLayout(LayoutKind.Sequential)]internal struct ADAPTER_STATUS{[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]internal byte[] adapter_address;internal byte rev_major;internal byte reserved0;internal byte adapter_type;internal byte rev_minor;internal ushort duration;internal ushort frmr_recv;internal ushort frmr_xmit;internal ushort iframe_recv_err;internal ushort xmit_aborts;internal uint xmit_success;internal uint recv_success;internal ushort iframe_xmit_err;internal ushort recv_buff_unavail;internal ushort t1_timeouts;internal ushort ti_timeouts;internal uint reserved1;internal ushort free_ncbs;internal ushort max_cfg_ncbs;internal ushort max_ncbs;internal ushort xmit_buf_unavail;internal ushort max_dgram_size;internal ushort pending_sess;internal ushort max_cfg_sess;internal ushort max_sess;internal ushort max_sess_pkt_size;internal ushort name_count;}[StructLayout(LayoutKind.Sequential)]internal struct NAME_BUFFER{[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]internal byte[] name;internal byte name_num;internal byte name_flags;}[StructLayout(LayoutKind.Sequential)]internal struct NCB{internal byte ncb_command;internal byte ncb_retcode;internal byte ncb_lsn;internal byte ncb_num;internal IntPtr ncb_buffer;internal ushort ncb_length;[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]internal byte[] ncb_callname;[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]internal byte[] ncb_name;internal byte ncb_rto;internal byte ncb_sto;internal IntPtr ncb_post;internal byte ncb_lana_num;internal byte ncb_cmd_cplt;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]internal byte[] ncb_reserve;internal IntPtr ncb_event;}[StructLayout(LayoutKind.Sequential)]internal struct LANA_ENUM{internal byte length;[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.MAX_LANA)]internal byte[] lana;}[StructLayout(LayoutKind.Auto)]internal struct ASTAT{internal ADAPTER_STATUS adapt;[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NUM_NAMEBUF)]internal NAME_BUFFER[] NameBuff;}internal class Win32API{[DllImport("NETAPI32.DLL")]internal static extern char Netbios(ref NCB ncb);}internal string GetMacAddress(){string addr = "";try{int cb;ASTAT adapter;NCB Ncb = new NCB();char uRetCode;LANA_ENUM lenum;Ncb.ncb_command = (byte)NCBCONST.NCBENUM;cb = Marshal.SizeOf(typeof(LANA_ENUM));Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);Ncb.ncb_length = (ushort)cb;uRetCode = Win32API.Netbios(ref Ncb);lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));Marshal.FreeHGlobal(Ncb.ncb_buffer);if (uRetCode != (short)NCBCONST.NRC_GOODRET)return "";for (int i = 0; i < lenum.length; i++){Ncb.ncb_command = (byte)NCBCONST.NCBRESET;Ncb.ncb_lana_num = lenum.lana[i];uRetCode = Win32API.Netbios(ref Ncb);if (uRetCode != (short)NCBCONST.NRC_GOODRET)return "";Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;Ncb.ncb_lana_num = lenum.lana[i];Ncb.ncb_callname[0] = (byte)'*';cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);Ncb.ncb_length = (ushort)cb;uRetCode = Win32API.Netbios(ref Ncb);adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));Marshal.FreeHGlobal(Ncb.ncb_buffer);if (uRetCode == (short)NCBCONST.NRC_GOODRET){if (i > 0)addr += ":";addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",adapter.adapt.adapter_address[0],adapter.adapt.adapter_address[1],adapter.adapt.adapter_address[2],adapter.adapt.adapter_address[3],adapter.adapt.adapter_address[4],adapter.adapt.adapter_address[5]);}}}catch{ }return addr.Replace(' ', '0');}
}

C#,精巧实用的代码,生成机器码(Machine Id)的基础源代码相关推荐

  1. 【移动开发】Android应用程序中实用的代码框架(一)

    好久没有更新博客了,这段时间里和我的小伙伴们("乌索普"."丁二爷"."小娜".'小雯'')参加了一个大学生Android应用软件比赛,利用 ...

  2. 实用android 代码,Android 实用代码七段(一)

    前言 这里积累了一些不常见确又很实用的代码,每收集7条更新一次,希望能对大家有用. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http ...

  3. ajax 示例代码,Ajax的简单实用实例代码

    我将实现一个简单的Ajax页面无刷新进行用户验证案例: 效果如下图: 实现主要过程: 在UsersAction类中的checkUser方法中接收并验证前台的表单数据,针对不同情况,返回一个状态码cod ...

  4. 对PE文件进行十六进制代码(机器码)提取并保存到外部文件

    前言与声明 秉持开源和共享的理念,博主在这里分享自己的代码. 博客中的代码可以将PE文件的十六进制代码(机器码)提取出来,这些机器码可用于机器学习.软件分析等. 声明: 转载请标明来处,创作不易! 代 ...

  5. 为开发者准备的9个实用PHP代码片段(转)

    [导读] 当你开发网站.app或博客系统时,如果有一些实用的代码片段可以直接使用,就可以节省你大量的时间和精力.这篇文章就为你分享几个实用的PHP代码片段,帮助你的Web开发.        本文由P ...

  6. php ajax简单实例代码,Ajax的简单实用实例代码

    这篇文章主要介绍了Ajax的简单实用实例代码,对ajax感兴趣的朋友可以参考下Ajax的简单实用的方法 我将实现一个简单的Ajax页面无刷新进行用户验证案例: 效果如下图: 实现主要过程: 在User ...

  7. html 生成唯一码,生成唯一32位ID编码代码,以满足对ID编号的唯一性加资源性解决问题...

    生成唯一32位ID编码代码,以满足对ID编号的唯一性加资源性解决问题 package com.huayu.common; /* * RandomGUID from http://www.javaexc ...

  8. 生成主键ID,唯一键id,分布式ID生成器雪花算法代码实现

    工具类:  package com.ihrm.common.utils;import java.lang.management.ManagementFactory; import java.net.I ...

  9. 我平时整理的一个生成机器码的类(转载)

    我平时整理的一个生成机器码的类,大伙看看. using System; using System.Management; using System.IO; using System.Runtime.I ...

最新文章

  1. HTSRealistic missions 10:Holy Word High School
  2. CIO的职业之路应该朝向何方 做主角还是配角?
  3. Struts2框架学习Action命名空间创建方式
  4. Android init.rc文件解析过程详解(二)
  5. IntelliJ IDEA打开Maven项目,Spring boot所有依赖红名,不可用
  6. 【题解】luogu p1111 修复公路
  7. linux centos7 root密码重置
  8. 2019ASC世界大学生超算竞赛预赛结果出炉:20校晋级,北航第一
  9. jquery 语法基础
  10. Windows下安装 rubyinstaller
  11. 智能电子秤全国产化电子元件推荐方案
  12. A002-186-2619-林斌锐
  13. 滤波器原理及其作用计算机网络,三种滤波器的工作原理
  14. MySQL 日期计算
  15. FineBI中tomcat服务器部署
  16. 2022.11.15 英语背诵
  17. 【风马一族_xml】xml语法
  18. 微信移动UI设计规范
  19. 软件即服务(saas)_什么是SaaS? 定义软件即服务
  20. 2022年武汉东湖高新区高新技术和专精特新企业跨境融资需求征集申报条件及时间

热门文章

  1. Tiktok免越狱群控 分享Tiktok引流变现矩阵玩法
  2. 零基础学软件测试难吗 真实案例告诉你,小白学测试难不难
  3. PythonC++相互混合调用编程全面实战-19c++给python传递函数和自定义模块
  4. 技术人员如何从容转型项目经理?
  5. 平淡生活:生活的五色拼图--轻松和沉重
  6. 2010年 搞笑离职感言
  7. 08-Web APIs
  8. Excel数据分析入门-函数和公式
  9. 处理谷歌浏览器被篡改主页的问题
  10. 江苏专转本应该如何准备?