Карта сайтаСсылкиКонтакты

Пишем генератор ключей (KeyGen)

PDF Печать
Статьи

Только в учебных целях! Давайте напишем генератор ключей для программы Телефонные коды городов. При анализе программы выяснилось, что серийный номер регистрации программы имеет вид XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX (восемь групп по четыре символа, разделенные дефисом). Причем сумма шестнадцатиричных кодов групп равна соответственно 300, 400, 310, 410, 320, 420, 330, 430.

Окно программы генератора кодов

Итак, приступим. Для начала на форму поместим кнопку TButton (btnGenerate) и поле ввода TEdit (edSerial). Для простоты задаем массив, в котором будут храниться цифры и латинские буквы.

В событии формы OnCreate заполняем массив:


var
  mas: array[0..61] of Char;
{ … }
procedure TfrmMain.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i:= 48 to 57 do
    mas[i - 48]:= Chr(i);

  for i:= 65 to 90 do
    mas[i - 55]:= Chr(i);

  for i:= 97 to 122 do
    mas[i - 61]:= Chr(i);
end;

Далее создаем функцию, которая будет генерировать, и возвращать строку из четырех символов. В качестве входного параметра этой функции передаем число, которое обозначает сумму hex-кодов группы символов.

В секцию Private declarations добавляем определение функции:


function GetSegment(itog: integer): string;
И сама функция:
function TfrmMain.GetSegment(itog: integer): string;
var
  i,i1,i2,i3,i4: integer;
  s: string;
begin
  randomize;
  i:= 0;
  while i <> itog do
  begin
    i:= 0;
    i1:= random(62);
    i2:= random(62);
    i3:= random(62);
    i4:= random(62);
    i:= Ord(mas[i1])+Ord(mas[i2])+Ord(mas[i3])+Ord(mas[i4]);
    Application.ProcessMessages;
  end;
  s:= mas[i1]+mas[i2]+mas[i3]+mas[i4];
  Result:= s;
end;

И при нажатии на кнопку OnClick формируем строку серийника и помещаем ее в поле ввода edSerial.


procedure TfrmMain.btnGenerateClick(Sender: TObject);
begin
  with edSerial do
  begin
    Text:= GetSegment(300);
    Text:= Text + '-' + GetSegment(400);
    Text:= Text + '-' + GetSegment(310);
    Text:= Text + '-' + GetSegment(410);
    Text:= Text + '-' + GetSegment(320);
    Text:= Text + '-' + GetSegment(420);
    Text:= Text + '-' + GetSegment(330);
    Text:= Text + '-' + GetSegment(430);
  end;
end;

Вот и все! Генератор ключей готов. Можно дополнить эту программку еще одной кнопкой, которая будет копировать сгенерированный серийный номер в буфер обмена Windows, но я считаю, что это уже излишество.


 

Добавить комментарий


Защитный код
Обновить