首页 > 解决方案 > 算法帮助 - 电话号码的唯一编码

问题描述

我有一本单词词典,分为两个不同长度的列表,形容词和名词。我希望能够将任何电话号码可逆地编码为一种格式,其中我有一个或多个形容词后跟一个名词。

示例可能是“+447911123456”=>“敏捷时髦的黄貂鱼”“07911123456”=>“时髦的老高尔夫球杆”

它应该具有雪崩效应等特性,并相对均匀地使用字典中的所有单词。

我一直无法想出满足所有要求的算法。有谁知道如何做到这一点,或者在哪里可以了解有关进行这种编码的更多信息?

如果有帮助,我已经在 github 上提供了字典。任何帮助表示赞赏!

标签: algorithmencoding

解决方案


可逆地编码任何电话号码这样的事情怎么样?

  1. 给定电话号码通常是 10 - 14 位数字,包括国际代码,如果我们忽略国际拨号代码“+”,我们可以将其视为 64 位整数(最多 19 位数字)。
  2. 将段分成 3 个大致均匀的区域 = 每个区域 21 位。
  3. 对具有固定重复模式的每个区域进行异或运算 - 即 seg 1 为 01,seg 2 为 10,seg 3 为 11。
  4. 执行 21 位宽的简单加密……可以轻松开发简单的自定义加密。
  5. 在这些转换之后,您最终得到 3 个数字。使用数字作为字典的键。第三块将引用名词词典。

第 3 步和第 4 步的目的是混淆您正在做的事情。例如,如果我们有 111 111 111 作为我们的号码,没有 3 和 4,我们可能会有“happy happy dog”。使用 3 和 4,即使段 1 和 2 相同,也会产生不同的词,例如“快乐邋遢的狗”。相反,我们可能会得到一个完全不同的数字导致重复的单词......即111 843 111 =>“happy happy cat”。

因为它仅用于混淆目的,所以这些不需要非常“安全”......


推荐阅读