新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → 晚上没事干,把ComponentONE.NET剁了... 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6173 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 晚上没事干,把ComponentONE.NET剁了... 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18406
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 晚上没事干,把ComponentONE.NET剁了...


    发信人: flier (小海 [浮沉随浪 记今朝]), 信区: DotNET
    标  题: 晚上没事干,把ComponentONE.NET剁了...
    发信站: BBS 水木清华站 (Mon Nov  3 23:52:45 2003), 转信

    http://www.componentone.com/Products.aspx?ProductCode=1

    C# Builder自带的一套for .NET控件,做的还不错,WinForm和Web的都有
    可惜要注册因此一直懒得用...直到今天有空有心情...
    发现.NET的注册机实在是好写...稍微看一下IL代码就搞定
    不过没有仔细检查,只确认了在IDE和程序运行时没问题,
    不知道发布出去会不会有什么不同,呵呵,欢迎反馈

    用户名和公司随便填,
    WinForm控件S8开头如S8202KP-TA-E3E7VD
    Web控件S9开头如S9202UP-P3-T6JQB2

    注册码生成核心代码如下:

    using System;
    using System.Text;
    using System.Globalization;
    using System.Reflection;
    using System.Diagnostics;

    namespace C1KeyGen
    {
      struct AssemblyVersionInfo
      {
        public string VersionString;  // GX;
        public int Major;             // GY
        public int Minor;             // GZ
        public int Build;             // H0
        public int Year;              // H1
        public int Month;             // H2
      }

      /// <summary>
      /// serial number length = 17
      ///  
      /// starts with "SE" / "S8" / "S9", "SE" may be mean "eval"
      /// </summary>
            public class KeyGen
            {
       StringBuilder sbTransTable = null;
       static readonly string ASCII_TABLE = "23456789ABCDEFGHJKLMNPQRSTUVWXY";

                    public KeyGen()
                    {
          buildTransTable();
                    }

        public string generate(Assembly asm, bool web)
        {
          StringBuilder sb = new StringBuilder(17, 17);

          sb.Append(web ? "S9" : "S8");

          AssemblyVersionInfo verInfo = getAssemblyVersionInfo(asm);

          int Part1 = verInfo.Year * 4 + verInfo.Month - 4;

          sb.Append((Part1 % 4).ToString("D1"));
          sb.Append((Part1 / 4 - 2000).ToString("D2"));

          byte[] data = new byte[7 - sb.Length + 6];

          new Random().NextBytes(data);

          int idx = 0;

          for(int i=sb.Length; i<7; i++)
          {
            sb.Append(ASCII_TABLE[data[idx++] % ASCII_TABLE.Length]);
          }

          StringBuilder sb2 = new StringBuilder();

          for(int i=idx; i<data.Length; i++)
          {
            sb2.Append(ASCII_TABLE[data[i] % ASCII_TABLE.Length]);
          }

          string checksum = calc(sb.ToString(), sb2.ToString());

          sb.Append('-').Append(checksum).Append('-').Append(sb2.ToString());

          return isValid(sb.ToString());
        }

        private bool inRange(string sn, int min, int max)
        {
          int value = Int32.Parse(sn, CultureInfo.InvariantCulture);

          return min <= value && value <= max;
        }

        private void buildTransTable()
        {
          sbTransTable = new StringBuilder(ASCII_TABLE);

          for(int i=1; i<sbTransTable.Length; i++)
          {
            char ch = sbTransTable[i-1];
            int k = 0;

            for(int j=1; j<sbTransTable.Length; j++)
            {
              if(((i * j) % sbTransTable.Length) == 1)
              {
                k = j;
                break;
              }
            }
            if(i < k)
            {
              sbTransTable[i-1] = sbTransTable[k-1];
              sbTransTable[k-1] = ch;
            }
          }
        }

        private string calc(string p1, string p2)
        {
          StringBuilder sb1 = new StringBuilder(p1);
          sb1.Append(p2);

          StringBuilder sb2 = new StringBuilder();
       
          for(int i=0; i<2; i++)
          {
            int k = 0;
            for(int j=0; j<sb1.Length; j++)
            {                     
              k += (j ^ (i + 1)) * sb1[j];           
            }
            sb2.Append(sbTransTable[k % sbTransTable.Length]);
          }

          return sb2.ToString();
        }

        private string isValid(string sn)
        {
          Debug.Assert(sn.Length == 17);

          Debug.Assert(inRange(sn.Substring(2, 1), 1, 4));
          Debug.Assert(inRange(sn.Substring(3, 1), 0, 9));
          Debug.Assert(inRange(sn.Substring(4, 1), 0, 9));

          Debug.Assert(sn.Substring(8, 2).Equals(calc(sn.Substring(0, 7), sn.Substring(11, 6))));

          return sn;
        }

        private AssemblyVersionInfo getAssemblyVersionInfo(Assembly asm)
        {
          AssemblyVersionInfo info;

          info.VersionString = ((AssemblyFileVersionAttribute)Attribute.GetCustomAttribute(asm, typeof(AssemblyFileVersionAttribute))).Version;

          string[] ver = info.VersionString.Split(new char[] {'.', ' '});

          info.Major = Int32.Parse(ver[0], CultureInfo.InvariantCulture);
          info.Minor = Int32.Parse(ver[1], CultureInfo.InvariantCulture);
          info.Build = Int32.Parse(ver[3], CultureInfo.InvariantCulture);

          int DateVer = Int32.Parse(ver[2], CultureInfo.InvariantCulture);

          info.Year  = DateVer / 10;
          info.Month = DateVer % 10;

          return info;
        }
            }
    }
    --
    .    生命的意义在于   /\   ____\ /\_ \   /\_\                                .  
    .        希望         \ \  \___/_\/\ \   \/_/__     __    _ _★              .  
    .        工作          \ \   ____\\ \ \    /\  \  /'__`\ /\`'_\              .  
    .      爱你的人         \ \  \___/ \ \ \___\ \  \/\ __// \ \ \/              .  
    .     和你爱的人         \ \___\    \ \_____\ \__\ \____\ \ \_\              .  
    .        ……             \/___/     \/_____/\/__/\/____/  \/_/ @nsfocus.com.  


    ※ 修改:·flier 于 Nov  3 23:53:03 修改本文·[FROM:  211.167.254.72]
    ※ 来源:·BBS 水木清华站 smth.org·[FROM: 211.167.254.72]
    上一篇
    返回上一页
    回到目录
    回到页首
    下一篇


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/9 2:25:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/1 16:28:31

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    58.594ms