|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.02.2007, 12:45 | #1 |
Участник клуба
Регистрация: 15.02.2007
Сообщений: 1,112
|
Помогите сделать регистратор
Буду весьма признателен, если кто подскажет, как сделать (или где скачать с исходниками) нормальный генератор кодов, сделанный на дельфе. Регистрационный ключ должен генерироваться исходя из компьютерного кода, который, в свою очередь, основываться на параметрах основного железа. Я кое - что пытался написать, но программа глючит. Далее я даю свою процедуру, а во вложенном файле полный исходник:
procedure TForm1.Button1Click(Sender: TObject); var lpMemoryStatus : TMemoryStatus;Ram : int64; VolumeName, FileSystemName : array [0..MAX_PATH-1] of Char; VolumeSerialNo : DWord; MaxComponentLength, FileSystemFlags : DWord; Compcode, Regcode : extended; temp : real; begin Edit2.Clear; if Edit11.Text <> '1234567'Then begin Showmessage('Неверный пароль');Edit1.Clear; Edit11.SetFocus; end else begin GetVolumeInformation('C:\',VolumeNa me,MAX_PATH,@VolumeSerialNo, MaxComponentLength,FileSystemFlags, FileSystemName,MAX_PATH); lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus); GlobalMemoryStatus(lpMemoryStatus); with lpMemoryStatus do ram :=strtoint(Format('%0.0f',[dwTotalPhys div 1/1 ])); ramm := ram; Edit1.Text :=floatToStr(Round(DiskSize(3)/10737841824*ram/19781881100*VolumeSerialNo)); Compcode := strtofloat(Edit1.Text); temp :=strtofloat(Edit1.Text[1])+strtoint(Edit1.Text[2])+strtoint(Edit1.Text[3]); Regcode := Round(sqrt(Compcode)/temp); Regcode := sqr(Regcode)*ramm/4750; Regcode:=round(Regcode*6); Regcode :=Regcode+strtoint(Edit1.Text[5])*strtoint(Edit1.Text[4]); Edit2.Text:=floattostr(regcode); end; end; Последний раз редактировалось Fainder; 01.11.2007 в 12:59. |
23.03.2007, 22:18 | #2 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,608
|
А зачем тебе нужен такой генератор?
|
24.03.2007, 09:43 | #3 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Защита ShareWare.
|
24.03.2007, 11:13 | #4 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,608
|
Так это нужно проверять на удалённом сервере. Чтобы программа подключилась к инету, и ей разрешили работать на этом компе под этим серейником. - вот это более менее надёжно...
|
24.03.2007, 11:43 | #5 |
Владимир М.
Участник клуба
Регистрация: 30.10.2006
Сообщений: 1,289
|
> Edit1.Text :=floatToStr(Round(DiskSize(3)/10737841824*ram/19781881100*VolumeSerialNo));
вообще жуть
Берегите друг друга!
|
24.03.2007, 11:48 | #6 |
Александр
Администратор
Регистрация: 28.10.2006
Сообщений: 17,608
|
Virtson, и что это было?
|
24.03.2007, 14:18 | #7 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
Цитата:
А если серьезно, то единственно неповторяющимся является данный момент отсчета времени. Дабы исключить влияние несинхронности часов на разных компьютерах (гипотетически ведь можно допустить, что несколько юзеров будут регистрироваться, а разнобой у них в системном времени таков, что получится одно и то же время), любым образом накладывается параметр, к примеру, VolumeSerialNo и получается некое "страшное" число. Теперь это число путем приведения к целому (вернее, простым убиранием плавающей запятой) и перестановкой цифирок по определенному алгоритму с последующей вставкой дефисов и т.д. В результате, вуа-ля - имеем нечто вроде ABCD-1726-4937-9432... Последний раз редактировалось mihali4; 24.03.2007 в 14:27. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите сделать... | slim5 | Помощь студентам | 4 | 15.06.2008 21:47 |
Помогите сделать выборку! | Adm | Microsoft Office Access | 1 | 06.02.2008 19:10 |