Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: генерация случайных букв Добавлено: 05.08.06 15:31  

Автор вопроса:  Dixon | ICQ: 262-393-953 

Ответить

  Ответы Всего ответов: 31  

Номер ответа: 16
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #16
Добавлено: 05.08.06 20:08
Чем оптимизировать твой ужас, так лучше написать с нуля, вот, что получилось у меня


Функция на скорую руку по похожему принципу:
Function RndText(bRussian As Boolean, bEng As Boolean, bNumbers As Boolean, bSymbols As Boolean, Lenght As Long) As String
sRus = "йцукенгшщзхъфывапролджэячсмитьбю"
sEng = "qwertyuioplkjhgfdsazxcvbnm"
sNum = "1234567890"
sSymb "~!@#$%^&*()""_+-*/<>?;:'{}[]"

If bRussian = True Then sAll = sRus
If bEng = True Then sAll = sAll & sEng
If bNumbers = True Then sAll = sAll & sNum
If bSymbols = True Then sAll = sAll & sSymb

intLen = Len(sAll)

For n = 1 To Lenght
    nRnd = Int(intLen * Rnd + 1)
    RndText = RndText & Chr(nRnd)
Next n
End Function


Ну, тут, думаю, уж все понятно и не нужны массивы...

Ответить

Номер ответа: 17
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #17
Добавлено: 05.08.06 20:17
мдаа... ну вы и написали за пол дня...
П.С. Последние несколько ответов рулят, строки с разрешёнными символами are always welcome. ещё лучше в массивы это всё

Ответить

Номер ответа: 18
Автор ответа:
 BUG(O)R



ICQ: 827887 

Вопросов: 13
Ответов: 142
 Web-сайт: hunger.ru
 Профиль | | #18
Добавлено: 05.08.06 20:18

Предложи свой вариант, какие проблемы?

Ответить

Номер ответа: 19
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #19 Добавлено: 05.08.06 20:28
If bRussian = True Then sAll = sRus
If bEng = True Then sAll = sAll & sEng
If bNumbers = True Then sAll = sAll & sNum
If bSymbols = True Then sAll = sAll & sSymb
нафик булевские переменные ещё с чем-то сравнивать??? рез-тат сравнения - булево значение, True или False. Оно и так уже записано в переменной!!! Сразу видно, народ не понимает смысл булевых значений (никому не в обиду)

Ответить

Номер ответа: 20
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #20
Добавлено: 05.08.06 20:32
2 Phoenix:
можно ещё вот так: If (bRussian = True) = True ...
:-)

2 BUG(O)R:
А чё, ответы номер 15 и 16 супер, а я не только предложил, но ещё и признал что Ваши лучше, что я ещё могу сделать? Написать код на картинке, ссылка на которую лежит ввеху этого мессажа? :) ну неет, это моё :)

Ответить

Номер ответа: 21
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #21
Добавлено: 05.08.06 20:59
нафик булевские переменные ещё с чем-то сравнивать???

Да блин, бывает, зыбываю, тем более, катал на скорую руку ;)

If (bRussian = True) = True

Извращенцы :)

Ответить

Номер ответа: 22
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #22 Добавлено: 05.08.06 21:40
2 Morpheus: а ещё можно так:
If ((bRussian And True) And (True Xor (Not bRussian)))

Ответить

Номер ответа: 23
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #23
Добавлено: 06.08.06 10:42
Можно создать массив букв. Потом случайным числом задать индекс буквы в массиве.

Ответить

Номер ответа: 24
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #24 Добавлено: 06.08.06 14:14
2 Djon: sp4u (special for you), прочитай пост #16...

Ответить

Номер ответа: 25
Автор ответа:
 BUG(O)R



ICQ: 827887 

Вопросов: 13
Ответов: 142
 Web-сайт: hunger.ru
 Профиль | | #25
Добавлено: 06.08.06 14:28

Ну если уж эта тема обсуждается до сих пор, то я вставлю ещё пару слов по поводу моей переделанной функции, пример которой приведём в посте №16 Calhoon'ом.

Так вот, реализовывал я специально через массивы, где каждый, массив содержит своё множество символов, хотел сначала сделать как Calhoon, но такой гсч на порядок хуже, чем мой вариант т.к. у него все множества объединяются в одно и в итоге выборка идёт из одного множества символов, которые к тому же идут подряд(т.е. выбрав я русские символы и цифры множество было бы таким: йцукенгшщзхъфывапролджэячсмитьбю1234567890), т.к. диапазон у нас довольно маленький, а визуально даже видно, что русских букв в 3 раза больше цифр, то такой гсч явно будет работать в пользу русских цифр, именно поэтому я сделал сначала случайную выборку массива, а потом случайную выборку символа из этого массива.
Вот если разбавить пример Calhoon'a ещё одной функцией, которая бы перемешивала sAll после объединения множеств, то тогда бы порядок качества такого гсч увеличился.

Ответить

Номер ответа: 26
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #26 Добавлено: 06.08.06 22:50
BUG(O)R оч. хорошо подметил насчёт проблемы ГСЧ по типу, предложенному Calhoon'ом. Кста, меня даже удивило, что никто не обратил внимание на
RndText = RndText & Chr(nRnd)
:)

Предлагаю сурс ГСЧ по типу BUG(O)R'а (если лень писать самим):
Option Explicit

Private Sub Command1_Click()
   Command1.Caption = GenerateKey(True, True, False, 20)
End Sub

Private Sub Form_Load()
   Call Randomize
   Call Command1_Click
End Sub

Private Function GenerateKey(ByVal bEnglish As Boolean, _
                             ByVal bNumbers As Boolean, _
                             ByVal bSymbols As Boolean, _
                             ByVal iLength As Integer) As String
Dim sSymbols(3) As String, iResult As String
Dim iIndex As Integer, iRandom As Integer

   sSymbols(0) = "qwertyuiopasdfghjklzxcvbnm"
   sSymbols(1) = "QWERTYUIOPASDFGHJKLZXCVBNM"
   sSymbols(2) = "1234567890"
   sSymbols(3) = "~`!@#$%^&*()_-+=|\{[}]:;""'<,>.?/"
   
   For iIndex = 1 To iLength
      Do
         iRandom = Int(Rnd() * 4)
      Loop While (Not bEnglish And (iRandom = 0 Or iRandom = 1)) Or (Not bNumbers And iRandom = 2) Or (Not bSymbols And iRandom = 3)
      iResult = iResult & Mid(sSymbols(iRandom), Int(Rnd() * Len(sSymbols(iRandom))) + 1, 1)
   Next
   
   GenerateKey = iResult
End Function

Ответить

Номер ответа: 27
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #27
Добавлено: 08.08.06 18:16
Кста, меня даже удивило, что никто не обратил внимание на
RndText = RndText & Chr(nRnd)

$%$*(~#!, что не так еще?
Давайте, умные и опытные, научите уму-разуму...

Ответить

Номер ответа: 28
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #28 Добавлено: 08.08.06 19:05
$%$*(~#!, что не так еще?
давай мыслить логически. Допустим, мы выбрали только цифры. Длина строки - 10. nRnd выбирается случайно в диапозоне 1...10.
А чему равен Chr(1), Chr(2), ... , Chr(10)?

Давайте, умные и опытные, научите уму-разуму...
ну а что остается?.. ;))

Ответить

Номер ответа: 29
Автор ответа:
 Calhoon



ICQ: 789764 

Вопросов: 90
Ответов: 230
 Web-сайт: 4elovekssn.blog.ru
 Профиль | | #29
Добавлено: 08.08.06 23:25
;) Все дошло, нашел, где напортачил, вставил из старой функции и не заметил по запарке ;)
RndText = RndText & Chr(nRnd)

меняем на
RndText = RndText & mid$(sAll, nRnd,1)

Думаю, мой код никто не запускал... Я в том же числе... ;)

Ответить

Номер ответа: 30
Автор ответа:
 Pashenko



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #30 Добавлено: 15.08.06 11:38
2 Dixon: у меня готовый генератор паролей есть (даже два). Могу скинуть.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам