是否有将GUID编码为107或更高的标准算法?

时间:2018-09-19 19:51:49

标签: algorithm encoding guid base

我需要将guid转换为19个或更少的字符,然后可以将其转换回完全相同的guid。

  • 该值将存储在数据库的文本字段中。
  • 字符不能是控制字符。
  • 字符不能为空格。
  • 这些字符必须可以与其他人区别开来。
  • 字符应可打印。
  • 最好使用ISO拉丁语1个字符,但不是必需的。

我能够找到的最接近的编码实际上具有正式文档,并且看来我需要的是this base 85编码。它使用前128个ASCII字符集中的85个“安全”字符,并将GUID转换为20个字符,这是在不使用扩展的ascii范围的情况下最好的。

话虽这么说;我需要知道对于某些扩展的ASCII集,是否存在形式为107或更高的正式编码,因为这是将guid装入19个字符所需的最小符号数。

(x 19 -1)≥(16 32 -1):x必须在107以上

注意:我可以轻松进行自己的转换,但是我想知道是否存在解决该问题的标准化算法。

1 个答案:

答案 0 :(得分:3)

快速的网络搜索尚未发现任何有用的编码标准。即使有,您可能很难满足您对字符易于被人区分的其他要求。即使在标准集中,也有许多看起来相似或可能引起混淆的字符,例如单引号和双引号,破折号的不同宽度或ó,ò,ô,ô,õ,ö和ø等许多变音符号。

以精选的大字体显示这些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的一部分或输入到Web表单时,将为:

" % & < > \

如果您想删除难以形容或难以通过电话描述的字符,例如:

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

如果您想删除某些(小)字体可能难以识别或区分的字符,例如:

• ™ ® ³ ¹ ¼ ¾ Ç ç |

那么普通文本也会遇到问题,例如:

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'的不同版本,因为您的语言不使用它们,则很容易将变音符与标准的点缀'i'混淆。


还要注意,“ Latin-1”字符集有不同版本:1987年的原始ISO 8859-1,1999年的ISO 8859-15更新,例如欧元符号和Windows-1252(也称为ISO-8859-1),当在HTML5文档中指定了“ Latin-1”时,它现在用作默认设置,我在上面的示例中使用了它。