我有,是C++BUILDER的
从一个“注册名"生成唯一的一个“序列号”如: 123a-23h5

解决方案 »

  1.   

    能不能给我发一个!多谢!
    [email protected]!再次感谢!
      

  2.   

    如果你只要一个永远唯一的序列号的话,只要一个函数就行了:
    function CreateClassID:String;
    记得在USES里加上COMOBJ。
      

  3.   

    to BCB
    我也想要:-)
    [email protected]
      

  4.   

    用turbopwr套件中的onGuard根本不用自己写程序.
      

  5.   

    String Cal_Psw3(String dw0,char *pw0)   //用用户名,pw0加密字,返回注册号
    {
          unsigned  __int64  i64;           // 返回 U8XU-B8NK-WAXR
          char *buf=(char *)&i64;
          dw0=dw0.Trim().UpperCase();
          if (dw0=="")
             dw0=Now().DateTimeString();
          String dw=dw0;
          int L=dw.Length();
          int K=((L+7)/8);
          int L1=K*8;
          while (L<L1)  // 长度配成8的倍数
            {
              dw=dw+dw0;
              L=dw.Length();
            }
          dw=dw.SubString(1,L1);
          char *s=pw0;
          if (*s!=0)
             for (int i=1;i<=L1;i++)  // XOR
               {
                  if (*s==0)
                     s=pw0;
                  dw[i]^=*s++;
               }
          for (int i=0;i<8;i++) //按组相加
            {
              char s=0;
              for (int j=1;j<=K;j++)
                 s+=dw[K*i+j];
              buf[i]=s;
            }
          int y=((int)i64)&0xf;   //循环右移y位
          i64=i64>>4;
          i64=(i64>>y)+(i64<<(64-y));
          String psw="";
          for (int i=0;i<12;i++)
              {  // 'A'-'N','P'-'Y','2'-'9'
                  int c=((int)i64)&31;
                  if (c<14)
                     c+='A';
                  else
                     if (c>=24)
                        c=(c-24)+'2';
                     else
                        c=(c-14)+'P';
                  if (c=='I')
                     c='8';
                  psw=psw+String((char)c);
                  i64=i64>>5;
                  if (i==3 || i==7)
                     psw=psw+"-";
              }
          return(psw);
    }
    String Cal_Psw2(String dw0,char *pw0)  //用用户名,pw0加密字,返回注册号
    {                                      // 格式: QXQQ-KS83
          unsigned  __int64  i64;
          char *buf=(char *)&i64;
          dw0=dw0.Trim().UpperCase();
          if (dw0=="")
             dw0=Now().DateTimeString();
          String dw=dw0;
          int L=dw.Length();
          int K=((L+7)/5);
          int L1=K*5;
          while (L<L1)  // 长度配成5的倍数
            {
              dw=dw+dw0;
              L=dw.Length();
            }
          dw=dw.SubString(1,L1);
          char *s=pw0;
          for (int i=1;i<=L1;i++)  // XOR
            {
               if (*s==0)
                  s=pw0;
               dw[i]^=*s++;
            }
          for (int i=0;i<5;i++) //按组相加
            {
              char s=0;
              for (int j=1;j<=K;j++)
                 s+=dw[K*i+j];
              buf[i]=s;
            }
          String psw="";
          for (int i=0;i<8;i++)
              {  // 'A'-'N','P'-'Y','2'-'9'
                  int c=((int)i64)&31;
                  if (c<14)
                     c+='A';
                  else
                     if (c>=24)
                        c=(c-24)+'2';
                     else
                        c=(c-14)+'P';
                  if (c=='I')
                     c='8';
                  psw=psw+String((char)c);
                  i64=i64>>5;
                  if (i==3)
                     psw=psw+"-";
              }
          return(psw);
    }void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       //  Edit2加密字可任意取
         Edit3->Text=Cal_Psw3(Edit1->Text,Edit2->Text.Trim().c_str());   // 三段方案
         Edit4->Text=Cal_Psw2(Edit1->Text,Edit2->Text.Trim().c_str());   // 二段方案
    }
      

  6.   

    uses ActiveX;var 
      Guid:TGuid;
      SN:string;
    begin
      CoCreateGUID(Guid);
      SN := GuidToStr(Guid));
    end;
      

  7.   

    to smallbridge:
       SN 的结果是什么样子?