Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задание вида пароля, 2 цифры и 4 буквы 
V
    Опции темы
dize
Дата 20.10.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 1.7.2009

Репутация: нет
Всего: нет



Использую для случайной генерации пароля:
Код

function RandomPassword(PLen: Integer): string;
 var
   str: string;
 begin
   Randomize;
  str    := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
   Result := '';
   repeat
     Result := Result + str[Random(Length(str)) + 1];
   until (Length(Result) = PLen)
 end;

Как установить общий вид пароля, чтобы было только 2 цифры и 6 букв?
--------------------
- Скажите, Большой Брат существует в том же смысле что и я? - Вы не существуете.
PM MAIL   Вверх
Akella
Дата 20.10.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



А ты сделай цикл по двум строкам, отдельно по символам, отдельно по цифрам. Можно ещё приплести маленькие буквы и спец. символы

сделай две переменные и по ним пляши, так сказать
str1    := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
str2    := '1234567890';

PM MAIL   Вверх
Akella
Дата 20.10.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Минус в том, что последняя обязательно цифра. Можно доделать код. smile

Код

function RandomPassword(PLen: Integer): string;
 var
   str1, str2: string;
   n, m, k: integer;
 begin
   Randomize;
  str1    := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  str2    := '1234567890';
  m := Random(PLen) - 2;//допустим 5
  k := PLen - m;// 8 - 5 = 3


//буквы
  for n := 1 to k do// от 1 до 3
      Result := Result + str1[Random(Length(str1)) + 1];//ABC


//одну цифру
      Result := Result + str2[Random(Length(str2)) + 1];//ABC7

//опять буквы (оставшиеся)
  for n := k to m do
    Result := Result + str1[Random(Length(str1)) + 1];//ABC7XY

//и ещё одну цифру
  Result := Result + str2[Random(Length(str2)) + 1];//ABC7XY75

 end;



Это сообщение отредактировал(а) Akella - 20.10.2009, 16:32
PM MAIL   Вверх
dize
Дата 20.10.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 1.7.2009

Репутация: нет
Всего: нет



Хоть и генерирует всегда разное кол-во символов, но общий алгоритм более-менее ясен.
Спасибо, попробую разобраться smile 

Это сообщение отредактировал(а) dize - 20.10.2009, 17:07
--------------------
- Скажите, Большой Брат существует в том же смысле что и я? - Вы не существуете.
PM MAIL   Вверх
Akella
Дата 20.10.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Да просто сочинял "на коленке", на скорую руку.  smile

Добавлено через 19 секунд
В принципе, некоторые программы мы так и пишем smile 
PM MAIL   Вверх
Keeper89
Дата 20.10.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Цитата(Akella @  20.10.2009,  21:45 Найти цитируемый пост)
В принципе, некоторые программы мы так и пишем smile  

Ну вот, главный-преглавный секрет открыл  smile 


--------------------
PM MAIL WWW   Вверх
1000000dollars
Дата 21.10.2009, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 6.10.2007

Репутация: нет
Всего: 8



Ещё вариант:

Код

function RandomPassword(letters: Integer; digits: Integer): string;
 var
  l,d : integer;

 begin
  Randomize;
  Result := '';
  l :=letters; // сколько осталось букв
  d :=digits; // сколько осталось цифр
  while (l>0) and (d>0) do // пока можно генерировать и то, и другое 
   begin
    if Random(2)=0 // случайно
     then begin 
           Result := Result + Char (Ord('0')+Random(10)); // генерируем цифру
           dec (d); // цифр осталось меньше
          end
     else begin
           Result := Result + Char (Ord('A')+Random(26)); // генерируем букву
           dec (l); // букв осталось меньше
          end
   end;
  while l>0 do // если остались только буквы
   begin
    Result := Result + Char (Ord('A')+Random(26)); // добиваем пароль буквами
    dec (l);
   end;
  while d>0 do // а если остались цифры
   begin
    Result := Result + Char (Ord('0')+Random(10)); // добиваем пароль цифрами
    dec (d);
   end;

 end;

PM MAIL   Вверх
dize
Дата 21.10.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 1.7.2009

Репутация: нет
Всего: нет



1000000dollars, немного не ясно как эту функцию использовать. Если написать:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := RandomPassword(6);
end;

То ругается "Not enough actual parameters".
--------------------
- Скажите, Большой Брат существует в том же смысле что и я? - Вы не существуете.
PM MAIL   Вверх
Keeper89
Дата 21.10.2009, 15:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



dize, а вы посмотрите сколько входных параметров у функции.


--------------------
PM MAIL WWW   Вверх
dize
Дата 21.10.2009, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 1.7.2009

Репутация: нет
Всего: нет



Ясно smile 
Все отлично работает, спасибо!
--------------------
- Скажите, Большой Брат существует в том же смысле что и я? - Вы не существуете.
PM MAIL   Вверх
Hexel
Дата 21.10.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 30.10.2007
Где: UA

Репутация: нет
Всего: нет



ну а чисто из интереса)

Код

function RandomPassword(nLetters, nDigits: Integer): string;
 var
   str, sResult: string;
   i: Integer;

 begin
   Randomize;   
   SetLength(sResult, nLetters + nDigits);

   str    := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   for i := 1 to nLetters + nDigits do
     sResult[i] := str[Random(Length(str)) + 1];

   str    := '0123456789';
   for i := 1 to nDigits do
     sResult[Random(nLetters + nDigits) + 1] := str[Random(Length(str)) + 1];
   Result := sResult;

 end;


Это сообщение отредактировал(а) Hexel - 21.10.2009, 21:58
PM MAIL   Вверх
1000000dollars
Дата 22.10.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 231
Регистрация: 6.10.2007

Репутация: нет
Всего: 8



dize, пожалуйста.

Hexel, Хороший вариант! smile
PM MAIL   Вверх
amsoft
Дата 22.10.2009, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 17.10.2009
Где: KZ, Astana

Репутация: 1
Всего: 4



Нет предела совершенству  smile 

Код

function RandomPassword(letters: Integer; digits: Integer): string;
var
S: string;
X: integer;
begin
Randomize;
SetLength(S,letters + digits);
for X := 1 to Length(S) do
    S[X] := Char(Ord('A') + Random(26));
for X := 1 to digits do
    S[Random(Length(S)) + 1] := Char (Ord('0')+Random(10));
Result := S;
end;

--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
Qu1nt
Дата 22.10.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 13.1.2007

Репутация: 22
Всего: 50



Код

function RandomPassword(Letters, Digits: Integer): AnsiString;
begin
  Randomize;
  SetLength(Result, Letters + Digits);
  for Letters := 1 to Length(Result) do
    Result[Letters] := Char(Ord('A') + Random(26));
  for Letters := 1 to Digits do
    Result[Random(Length(Result)) + 1] := Char(Ord('0') + Random(10));
end;

PM MAIL   Вверх
amsoft
Дата 22.10.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 201
Регистрация: 17.10.2009
Где: KZ, Astana

Репутация: 1
Всего: 4



Qu1nt
Воистину нет предела совершенству  smile 
--------------------
"Кто бы ты ни был - не думай о себе слишком"Дельфин
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1094 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.