我需要一个能根据用户名(中文)生成注册码的程序的源代码 (50分)

  • 主题发起人 主题发起人 dali2000
  • 开始时间 开始时间
D

dali2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在软件中用一中文单位名对应一注册码,就是说一个单位有唯一一个注册码,
请各位指教
 
可以自己做一个算法,不要让人很容易发现规律。
 
算法要好,如果只是防一般的,我看简单点就好
在网上找吧,多的很
 
其实我觉得这些东西应该不是很难的啊,最多也就是XOR之类的
如果你想做的特别复杂的话,可能在网上也不太好找。
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,shellapi;
type
TForm1 = class(TForm)
Button1: TButton;
KeyEdit: TEdit;
PasswordEdit: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetKeyString(Name: string): string;
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
PasswordEdit.text:=GetKeyString(KeyEdit.Text);
end;

//获得注册码
function Tform1.GetKeyString(Name: string): string;
var
S, Tmp: string;
I, N, PN: LongInt;
{*******Prime Number Function********}
function Prime(n: byte): boolean;
//
var
i, ndiv: byte;
begin
ndiv:=2;
//初始化ndiv变量
Result:=true;
//默认返回结果true
for i:=2 to n-1 do
begin
if (n mod i) = 0 then
inc(ndiv);
if ndiv > 2 then
begin
result:=false;
break;
end
end;
end;
{************************************}
begin
N:=0;
S:=Name;
//注册用户提供的注册名字
for i:=1 to length(S) do

begin
if Prime(ord(S)) then
Tmp:=Tmp + UpperCase(S);
//ord函数返回S字母在序数类型中的位置值
if i <> 1 then
Pn:=ord(S[i-1]) else
Pn:=ord(S[1]);
N:=Pn shl 2 + N+8;
//N:=Pn shl 3 + N;这一行代码时生成序列号的关键代码,通过将数字“3”修改成其它数字或者再加上任意一个数字等形式,可以生成不同的注册码
end;
S:=Tmp + IntToStr(N);
Result:=S;
end;

end.
 
接受答案了.
 
后退
顶部