Генератор серийного номера из имени пользователя
|
|
toizy | Дата: Пятница, 06 Апреля 2007, 20:23 | Сообщение # 1 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| При помощи ММВ можно генерировать серийные номера по достаточно хитрым алгоритмам. Вот что получилось у меня: Code a[1]=0 a[2]=0 a[3]=0 a[4]=0 с=0
For i=1 To LEN(UserName$) c=c+1 If (c=5) Then c=1 End str$=StrCopy(UserName$,i,1) a[c]=a[c]+ORD(str$)+i Next i
a[1]=a[1]+a[4] a[4]=a[4]+a[1] ** a[2]=a[2]+a[1] a[1]=a[1]+a[2] ** a[3]=a[3]+a[2] a[2]=a[2]+a[3] ** a[4]=a[4]+a[3] a[3]=a[3]+a[4] ** serial$=CHAR(a[1])+'-'+CHAR(a[2])+'-'+CHAR(a[3])+'-'+CHAR(a[4]) LoadText("UserSerial","serial$") UserName$ - переменная, содержащая имя пользователя, она должна быть заполнена до начала выполнения сценария. После того, как сценарий отработает, переменная serial$ будет содержать серийник. Длина серийника зависит от длины переменной UserName$, так что вам придётся контролировать длину введённых пользователем данных. Разумеется, лучше не использовать мой код в неизменном виде, обязательно позаботьтесь о модификации входных или выходных данных. Также, имея желание, вы могли бы изменить либо дополнить этот алгоритм, поскольку он слишком прост. Например, вы можете использовать подмену символов и их сочетаний.
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
as-master | Дата: Пятница, 06 Апреля 2007, 20:45 | Сообщение # 2 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Хороший скрипт, забрал себе на добрую память
Да пребудет с вами ММВ!
|
|
| |
toizy | Дата: Среда, 11 Марта 2009, 16:43 | Сообщение # 3 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Сегодня подумал ещё и усложнил пример. Code a[1] = 0 a[2] = 0 a[3] = 0 a[4] = 0 c = 0 MaxGroupAmount = 9999 UserName$ = 'as-master was gone forever, we are still mouring for you!' For i = 1 To LEN(UserName$) c = c + 1 If (c = 5) Then c = 1 End str$ = StrCopy(UserName$, i, 1) a[c] = a[c] + ORD(str$) + i Next i ** a[1] = a[1] + a[4] a[4] = a[4] + a[1] ** a[2] = a[2] + a[1] a[1] = a[1] + a[2] ** a[3] = a[3] + a[2] a[2] = a[2] + a[3] ** a[4] = a[4] + a[3] a[3] = a[3] + a[4] ** MaxGroupAmount$ = CHAR(MaxGroupAmount) l = LEN(MaxGroupAmount$) For i = 1 To 4 c = a[i] / MaxGroupAmount c = INT(c) * MaxGroupAmount a[i] = a[i] - c a$[i] = CHAR(a[i]) aLen = LEN(a[i]$) If (aLen < l) Then For c = aLen To l - 1 a$[i] = '0' + a$[i] Next c End Next i ** serial$ = a$[1] + '-' + a$[2] + '-' + a$[3] + '-' + a$[4] LoadText("UserSerial","serial$") Добавлено (11 Март 2009, 16:43) --------------------------------------------- В данном примере переменная MaxGroupAmount содержит число, максимальное для каждой группы, т.е. число в любой из 4-х групп не может быть больше MaxGroupAmount.
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
DEMBEL | Дата: Среда, 11 Марта 2009, 16:54 | Сообщение # 4 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| Это ты молодец, придется и мне его скоммуниздить отсюда...
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |
Rush | Дата: Среда, 11 Марта 2009, 17:57 | Сообщение # 5 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Не совсем то, что в названии темы, но может и мой старый проект пригодится кому. Еще на 496а делал... Так, для интереса...
|
|
| |
toizy | Дата: Среда, 11 Марта 2009, 19:06 | Сообщение # 6 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Тоже хорошо. Главное, что преобразование обратимо, т.е. подойдёт для шифрования. А мой пример необратим и работает подобно хеш-функции, на которой, собственно, и основан Кажется, md5... Добавлено (11 Март 2009, 19:06) --------------------------------------------- Только это элемент, а md5 намного сложнее...
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
Sower | Дата: Понедельник, 16 Марта 2009, 11:49 | Сообщение # 7 |
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
| Я на паскале давно писал типа такого, он выдаёт скоко хочешь вариантов, плюс любой размер блока через -, но основан на random'е, если надо выложу.
|
|
| |
toizy | Дата: Понедельник, 16 Марта 2009, 13:59 | Сообщение # 8 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Выкладывай. Но что-то мне подсказывает, что в твоём случае каждый сгенерированный вариант будет отличаться от предыдущего, сей же способ хорош тем, что даёт всегда одинаковые данные для одной и той же строки. Это своего рода хэш-функция средством ммв, необратимое преобразование в уникальную последовательность данных, каждый раз одинаковую для одних и тех же входных данных. Любые вариации с рандомом не выполнят требуемого условия "одинаковости"
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
Sower | Дата: Воскресенье, 26 Апреля 2009, 07:45 | Сообщение # 9 |
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
| Quote (toizy) сей же способ хорош тем, что даёт всегда одинаковые данные для одной и той же строки Не, этот генератор выдает числа, может показаться тупостью, но он хороший поролик может подготовить, вот прикрепление, там pas файл и переделанный генератор с паскаля на mmb!
|
|
| |
Rush | Дата: Воскресенье, 26 Апреля 2009, 08:23 | Сообщение # 10 |
Обозреватель-консультант
Группа: Проверенные
Сообщений: 216
Репутация: 10
Награды: 1
Статус: Offline
| Grand, а смысл этого пароля? Пароль ведь нужен для того, чтобы его сравнить с образцом. А это просто генератор случайной последовательности чисел.
|
|
| |
DEMBEL | Дата: Вторник, 08 Декабря 2009, 20:21 | Сообщение # 11 |
Наш дизайнер
Группа: Модераторы
Сообщений: 2266
Репутация: 135
Награды: 32
Статус: Offline
| Алгоритм в первом сообщении странно работает. Создадим кнопку, запишем туда скрипт, запишем туда же значение имени пользователя и запустим несколько раз. Серийники на выходе каждый раз разные. И повторяются по кругу четыре разных значения. А должно быть постоянно одинаковое. В скрипте поста 3 все нормально.
Win7x64 SP1 Neobook v5.70 (Trial) WinXP SP3 Neobook v5.62
|
|
| |
toizy | Дата: Среда, 09 Декабря 2009, 10:10 | Сообщение # 12 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Работает не странно, просто чтобы был один и тот же вариант, число символов UserName$ должно быть кратно 4-м. Если принципиально, используй 2й вариант.
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |