Страница: 1 | 2 | 3 |
Вопрос: генерация случайных букв
Добавлено: 05.08.06 15:31
Автор вопроса: Dixon | ICQ: 262-393-953
Ответы
Всего ответов: 31
Номер ответа: 16
Автор ответа:
Calhoon
ICQ: 789764
Вопросов: 90
Ответов: 230
Web-сайт:
Профиль | | #16
Добавлено: 05.08.06 20:08
Функция на скорую руку по похожему принципу:
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-сайт:
Профиль | | #17
Добавлено: 05.08.06 20:17
мдаа... ну вы и написали за пол дня...
П.С. Последние несколько ответов рулят, строки с разрешёнными символами are always welcome. ещё лучше в массивы это всё
Номер ответа: 18
Автор ответа:
BUG(O)R
ICQ: 827887
Вопросов: 13
Ответов: 142
Web-сайт:
Профиль | | #18
Добавлено: 05.08.06 20:18
Предложи свой вариант, какие проблемы?
Номер ответа: 19
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #19
Добавлено: 05.08.06 20:28
If bEng = True Then sAll = sAll & sEng
If bNumbers = True Then sAll = sAll & sNum
If bSymbols = True Then sAll = sAll & sSymb
Номер ответа: 20
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #21
Добавлено: 05.08.06 20:59
Да блин, бывает, зыбываю, тем более, катал на скорую руку
Извращенцы
Номер ответа: 22
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #22
Добавлено: 05.08.06 21:40
2 Morpheus: а ещё можно так:
Номер ответа: 23
Автор ответа:
Djon
Вопросов: 61
Ответов: 471
Web-сайт:
Профиль | | #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-сайт:
Профиль | | #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'ом. Кста, меня даже удивило, что никто не обратил внимание на
Предлагаю сурс ГСЧ по типу BUG(O)R'а (если лень писать самим):
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-сайт:
Профиль | | #27
Добавлено: 08.08.06 18:16
RndText = RndText & Chr(nRnd)
$%$*(~#!, что не так еще?
Давайте, умные и опытные, научите уму-разуму...
Номер ответа: 28
Автор ответа:
Sacred Phoenix
ICQ: 304238252
Вопросов: 52
Ответов: 927
Профиль | | #28
Добавлено: 08.08.06 19:05
А чему равен Chr(1), Chr(2), ... , Chr(10)?
Номер ответа: 29
Автор ответа:
Calhoon
ICQ: 789764
Вопросов: 90
Ответов: 230
Web-сайт:
Профиль | | #29
Добавлено: 08.08.06 23:25
Все дошло, нашел, где напортачил, вставил из старой функции и не заметил по запарке
меняем на
Думаю, мой код никто не запускал... Я в том же числе...
Номер ответа: 30
Автор ответа:
Pashenko
ICQ: 176176951
Вопросов: 14
Ответов: 655
Профиль | | #30
Добавлено: 15.08.06 11:38
2 Dixon: у меня готовый генератор паролей есть (даже два). Могу скинуть.