2016-12-04 8 views
2

Я использую C# язык для проекта. Мне нужно предоставить пользователю большой (9 + разрядный) номер, который им придется повторно ввести в другую систему (для последующей корреляции данных). Если пользователь вводит номер, который большой (вручную) без ошибок будет практически невозможным.алгоритм-сокращение +10 цифр строка

Я пытаюсь найти решение, чтобы сократить это число с помощью base64, но весь найденный мной код создаст строчную комбинацию символов и цифр. Есть ли простой математический алгоритм, который я могу использовать, чтобы сделать меньшее число меньшим? Результат должен быть числовым, а не буквенным.

+7

Как вы можете кодировать [0-9] в [0-9] и делать это, используя меньшее количество позиций? Посмотрите на тире для группировки и добавьте номер контрольной суммы. – CodeCaster

+0

Да, вы можете. Он называется uuencode/uudecode. Он используется в операционной системе unix для упаковки tar (zip). Поскольку ASCII - 8 бит, а цифра - 4 бита, вы можете упаковать цифры в 8 бит, чтобы получить меньше символов. uuenocode упаковывает символы только на печатные символы, поэтому символы управления ascii не используются, а символ выше 128 ... 255 не используется. Поскольку uuencode используется в стандартах электронной почты, он находится в библиотеке System.Web.Mail.MailEncoding.UUEncode – jdweng

+0

@jdweng _ "Результат должен быть ** числовым ** не буквенным числом" _ – CodeCaster

ответ

0

Вы неправильно устраняете проблему, вместо того, чтобы изменять размер номера, просто создайте удобный способ для пользователя, чтобы скопировать прошлое число, простое ключевое событие, которое скопирует номер в буфер, тогда пользователь будет не нужно записывать номер вниз.

+0

привет.К сожалению, это не возможно наука номера напечатаны на изображениях, и эти изображения используются для рекламы продуктов наших компаний в социальных сетях. –

+0

Почему бы не разместить его как QR-код? – Martheen

0

Сокращение числа с использованием только цифр никогда не будет работать.

Что вам действительно нужно - это некоторая форма проверки ошибок. Тот, который работает очень хорошо, - это алгоритм Верхоффа, который обнаружит почти все опечатки. Есть много примеров, чтобы найти онлайн.

нравится: https://www.codeproject.com/articles/15939/verhoeff-check-digit-in-c

+0

номера записываются клиентами как сообщение через их сотовые телефоны. Мы не хотим заставлять их вводить сложный текст. –

+0

Нет, алгоритм Верхоффа добавит только одну цифру, но обнаружит наиболее распространенные ошибки. Просто попробуйте и поразитесь. – Frank

0

Вы можете использовать алгоритм хеширования, чтобы хэш ваш большое количество, но вы должны иметь дело с хэш столкновения. Одним из таких очень простых в использовании является контрольная сумма sum16: https://en.wikipedia.org/wiki/List_of_hash_functions

См. Сумму16, вы можете иметь только 0-65536. Подумайте о sum18?

 Смежные вопросы

  • Нет связанных вопросов^_^