Форум
Написать нам
  • Страница 1 из 1
  • 1
Модератор форума: as-master  
Генератор серийного номера из имени пользователя
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
Хороший скрипт, забрал себе на добрую память smile

Да пребудет с вами ММВ!
 
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
Не совсем то, что в названии темы, но может и мой старый проект пригодится кому. smile
Еще на 496а делал... Так, для интереса...
Прикрепления: Coder.zip (3.3 Kb)
 
toizyДата: Среда, 11 Марта 2009, 19:06 | Сообщение # 6
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
Тоже хорошо. Главное, что преобразование обратимо, т.е. подойдёт для шифрования. А мой пример необратим и работает подобно хеш-функции, на которой, собственно, и основан smile Кажется, 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!
Прикрепления: KeyGenOnPascalM.rar (2.4 Kb)
 
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й вариант.

Жизнь оказалась не такой уж и забавной, как поначалу...
 
  • Страница 1 из 1
  • 1
Поиск: