Алгоритм исключающий символ с возможностью его востановления
От: LexRema  
Дата: 02.04.08 15:45
Оценка:
Привет!

Есть серийник. Он весьма хорош собой. Однако присутствие в нем символов 1,l,L,O,o,0 может мешать его читабельности и путать пользователя. Готово уже все(генерация, проверка). Осталось чего -то сделать с такой строкой, чтоб удалять символы перечисленого типа при передаче пользователю, а потом восстанавливать и во время верификации использовать восстановленный вариант... Что то не шарю пока...
Re: Алгоритм исключающий символ с возможностью его востановл
От: Аноним  
Дата: 02.04.08 15:50
Оценка:
Здравствуйте, LexRema, Вы писали:

LR>Привет!


LR>Есть серийник. Он весьма хорош собой. Однако присутствие в нем символов 1,l,L,O,o,0 может мешать его читабельности и путать пользователя. Готово уже все(генерация, проверка). Осталось чего -то сделать с такой строкой, чтоб удалять символы перечисленого типа при передаче пользователю, а потом восстанавливать и во время верификации использовать восстановленный вариант... Что то не шарю пока...


Дык, две возможности всего. Не использовать в конечном алфавите сразу при генерации, или заменять на последовательность, которая гарантированно не встретится в результирующей строке.
Re: Алгоритм исключающий символ с возможностью его востановл
От: SergH Россия  
Дата: 02.04.08 15:55
Оценка:
Здравствуйте, LexRema, Вы писали:

LR>Есть серийник. Он весьма хорош собой. Однако присутствие в нем символов 1,l,L,O,o,0 может мешать его читабельности и путать пользователя. Готово уже все(генерация, проверка). Осталось чего -то сделать с такой строкой, чтоб удалять символы перечисленого типа при передаче пользователю, а потом восстанавливать и во время верификации использовать восстановленный вариант... Что то не шарю пока...


Переформулируй задачу. Есть строка, закодированная с использованием символов 0..9A..Za..z. Нужно перекодировать её с использованием сокращённого набора символов. Например, можно рассматривать строку как число в одной системе счисления и нужно перевести в другую. Или завести esc-символ, например 'x'. Тогда из строки нужно исключить все 1, l, o, O, 0, x, а вместо них вставить xA, xB, xC, xD, xE, xF. Это проще, но строка может получиться чуть длиннее, чем в первом случае.
Делай что должно, и будь что будет
Re[2]: Алгоритм исключающий символ с возможностью его востан
От: LexRema  
Дата: 02.04.08 16:35
Оценка:
SH>Переформулируй задачу. Есть строка, закодированная с использованием символов 0..9A..Za..z. Нужно перекодировать её с использованием сокращённого набора символов. Например, можно рассматривать строку как число в одной системе счисления и нужно перевести в другую. Или завести esc-символ, например 'x'. Тогда из строки нужно исключить все 1, l, o, O, 0, x, а вместо них вставить xA, xB, xC, xD, xE, xF. Это проще, но строка может получиться чуть длиннее, чем в первом случае.

Да... Именно... Но не пойдет. Ескапе — хорошо,но не красиво... Уже думал. Задача сформулирована именно так... И длина выхода должна быть та же
Re[3]: Алгоритм исключающий символ с возможностью его востан
От: LexRema  
Дата: 02.04.08 19:09
Оценка:
Спасибо, поменял немного кодирующий алгоритм.
Re: Алгоритм исключающий символ с возможностью его востановл
От: Кодт Россия  
Дата: 02.04.08 23:17
Оценка: 2 (1)
Здравствуйте, LexRema, Вы писали:

Что сложного? Придумать алфавит, в котором нет проблемных букв? На:
ABCDEFGHJKLMNPQRSTUVWXYZ23456789
I,O,1,0 — исключены
итого ровно 32 знака. Очень удобно (степень 2).
Опять же, можно наплевать на регистр. Там, правда, L строчное похоже на цифру 1 и I заглавное — но это разруливается элементарно: знаки I, L, i, l, 1 считаются эквивалентными.
Закодировать число в 32-ричной системе — как нефиг делать.

Второй путь — это эскейпить проблемные символы.
Например, I,l,1,O,0,Z <--> ZA,ZB,ZC,ZD,ZE,ZF (Z выступает эскейпом).
Серийник становится переменной длины.
Перекуём баги на фичи!
Re[2]: Алгоритм исключающий символ с возможностью его востан
От: andy1618 Россия  
Дата: 03.04.08 08:55
Оценка:
А>Дык, две возможности всего. Не использовать в конечном алфавите сразу при генерации, или заменять на последовательность, которая гарантированно не встретится в результирующей строке.

Ниже привели ещё один способ — считать схожие символы одинаковыми.

Кстати, для русскоязычного приложения есть ещё одна проблема — схожесть в написании русских и латинских букв (классический пример — MOCKBA).
Для решения этой проблемы можно первым символом серийника сделать какую-нибудь явно латинскую букву (типа L, F, D и т.п.), чтобы юзер сразу переключил раскладку клавы на нужный язык.
Re[3]: Алгоритм исключающий символ с возможностью его востан
От: Eugene Kilachkoff Россия  
Дата: 09.04.08 13:37
Оценка:
Здравствуйте, andy1618, Вы писали:

А>>Дык, две возможности всего. Не использовать в конечном алфавите сразу при генерации, или заменять на последовательность, которая гарантированно не встретится в результирующей строке.


A>Ниже привели ещё один способ — считать схожие символы одинаковыми.


Это и есть "не использовать". А описанный способ -- просто метод получения редуцированного алфавита из "большого", привычного нам.


A>Кстати, для русскоязычного приложения есть ещё одна проблема — схожесть в написании русских и латинских букв (классический пример — MOCKBA).

A>Для решения этой проблемы можно первым символом серийника сделать какую-нибудь явно латинскую букву (типа L, F, D и т.п.), чтобы юзер сразу переключил раскладку клавы на нужный язык.
А вот не факт что поможет Юзеры -- они разные бывают.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.