Существует ли стандартный алгоритм для кодирования guid как базы 107 или выше? - PullRequest
0 голосов
/ 19 сентября 2018

Мне нужно преобразовать guid в 19 или менее символов, которые можно преобразовать обратно в точно такой же guid.

  • Значение будет сохранено в текстовом поле в базе данных.
  • Символы не могут быть управляющими символами.
  • Символы не могут быть пробелами.
  • Символы должны различаться человеком друг от друга.
  • Символы должны быть пригодны для печати. ​​
  • Символ латинского ISO 1 предпочтителен, но не обязателен.

Самая близкая кодировка, которую мне удалось найти, на самом деле имеет формальную документацию и выглядит какМне нужно это это кодировка базы 85.Он использует 85 «безопасных» символов из первого набора символов ASCII из 128 символов и доводит любую подсказку до 20 символов, что является лучшим, что вы можете получить, не используя расширенный диапазон ASCII.

При этом;Мне нужно знать, существует ли формальное кодирование для некоторого расширенного набора ASCII, которое является основанием 107 или более, потому что это минимальное количество символов, необходимое для вписывания любого guid в 19 символов.

(x 19 -1) ≥ (16 32 -1): x должно быть где-то более 107

Примечание : я мог бы легко придумать свойпреобразование, но я хотел бы знать, если есть стандартизированный алгоритм, который решит проблему.

1 Ответ

0 голосов
/ 20 сентября 2018

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

Эти 140, вероятно, можно без проблем различить при отображении крупным правильно выбранным шрифтом:

0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
! " # $ % & ( ) * + , - . / : ; < = > ? @ [ \ ] ^ { | } ~
€ ‡ ‰ • ™ ¢ £ ¤ ¥ § © ¬ ® ¯ ° ± ² ³ ¶ ¹ ¼ ½ ¾ ¿ ÷
Š Œ Ž š œ ž µ Æ Ç Ð Ñ æ ç ñ Ÿ Ã Ê Õ Û ÿ ã ê õ û

Если вам пришлось удалить символы, которые могут вызвать технические проблемы, например, при отображении в видечасть html или введенные в веб-формы:

" % & < > \

Если вы хотите удалить по телефону символы, которые сложно или запутанно описать, например:

‡ ‰ ¤ ¬ ¯ µ ¶ ÷ Ð Œ Æ æ œ

Если вы хотите удалить символы, которые трудно идентифицировать или различить в некоторых (маленьких) шрифтах, например:;

• ™ ® ³ ¹ ¼ ¾ Ç ç |

Тогда с обычным текстом вы также столкнетесь с проблемами, например:

l versus I
O versus 0

Таким образом, безопасным набором наиболее легко различимых символов может быть, например:

  1 2 3 4 5 6 7 8 9                                  (no zero)
a b c d e f g h i j k   m n o p q r s t u v w x y z  (no 'l')
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
! # $ ( ) * + , - . / : ; = ? @ [ ] ^ { } ~
€ ¢ £ ¥ § © ° ± ² µ ½ ¿
ã Ã ê Ê ñ Ñ õ Õ š Š û Û ÿ Ÿ ž Ž

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


Я должен добавить, что распознавание символов, вероятно, зависит от культуры.Я ожидаю, что французы легко увидят разницу между é, è и ê, в то время как для говорящего на английском языке все три могут выглядеть как «e с акцентом на вершине».Вот почему я не выбрал ни одну версию «я» с диакритическим знаком;если вы не ожидаете разных версий «i», поскольку ваш язык их не использует, диакритический знак легко спутать со стандартным пунктиром «i».


Также обратите внимание, что существуют разные версии набора символов "Latin-1": оригинальный ISO 8859-1 от 1987 года, ISO 8859-15 обновление 1999 года, в которое добавлены, например, знак евро и Windows-1252 (также известный как ISO-8859-1), который теперь используется по умолчанию, когда в HTML5 задано значение "Latin-1"документ, и который я использовал в примере выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...