javascript - 字符串加密 - 生成独特的模式,如 Spotify 代码

标签 javascript arrays string algorithm encryption

昨天我读到了问题Algorithm to create costum Template/Code from String .因为这个问题没有很好地表述,所以它立即被否决了。然而,在我看来这个问题本身并没有那么糟糕,所以我决定再次提出这个问题的一个希望更好的版本。

好的,我想知道字符串加密情况如何,例如新的 Spotify 代码正在运行。见下图:

Spotify Codes

I would be super interested in the extent to which it is possible to implement something like this pattern-encryption in javascript.

Spotify 代码 - 我已经在上面提到过 - 结构在一行中,分为不同大小的条。

假设一行被分成 24 个条,所有条的大小都可以是“3”、“5”、“7”或“9”。

 string = 'hello'   -->  pattern = '3,3,5,7,9,3,7,9,9,3,3,5,3,9,5,3,3,7,5,9,3,9,3,9'


将一个字符串(比如说 5 个字符)翻译成一个独特的模式,之后也可以转换回来并作为一个字符串读取的好方法/简单方法是什么?

这是我到目前为止开发的代码,但在此代码中我使用了一个包含 10 种不同可能性的键数组(--> 条形大小),但我只喜欢我们 4 种不同的大小。


解释:

我' 将我的字符串 'hello' 转换为二进制格式,并将字符串分成最多 3 个为一组,得到如下内容:['001', '110', '0']。

然后我使用上面的结果数组并在下面的键数组中找到匹配项并获取索引(10 种不同的索引 --> 10 种不同的可能性)并将它们用作条形尺寸。

But, There MUST BE a way more efficient method to translate a string into a unique pattern. I hope somebody can help me improve my small algorithm. Thanks a million in advance.

var key = ['0', '1', '000','001','010','100','110','101','011','111']


String.prototype.encode = function() {
  var code = this, result = [],encryped_string=[]
  for (var i=0; i<code.length;i++) result.push(code[i].charCodeAt(0).toString(2).match(/.{1,3}/g));
  for (var i=0; i<result.length; i++) for (var j=0; j<result[i].length; j++) encryped_string.push(key.indexOf(result[i][j]))
  return encryped_string
}



var code = 'hello';
console.log(code.encode())

最佳答案

您似乎在假设从字符串“Coffee”到显示的图形存在直接映射。这种假设几乎肯定是不正确的。

首先,考虑如果有两首不同的歌曲“Coffee”会发生什么。您提出的算法将为它们分配相同的代码。这似乎不合理。您希望代码唯一地标识歌曲。

其次,歌名可以任意长。例如,平克·弗洛伊德 (Pink Floyd) 有一首歌叫做“几种毛茸茸的小动物聚集在一个洞穴里,用 Pict 开槽”。您的编码算法可能无法将其放入 24 小节中。即使可以,我总能找到更长的歌名。

给定字母 a-z,有 11,881,376 种可能的 5 个字符的字符串。如果您只想对所有可能的情况进行唯一编码,则只需 23 位即可。只需将字符串视为 base-26 数字并进行转换即可。

Spotify 很可能会为每首歌曲分配一个唯一编号,然后对该编号进行编码。字符串“Coffee”与您在屏幕上看到的图形代码之间没有直接映射。

关于javascript - 字符串加密 - 生成独特的模式,如 Spotify 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47267924/

相关文章:

javascript - 将现场播放音频的声音加载到 p5js 上

javascript - FadeIn() 警报错误在 bootstrap3 中不起作用

javascript - 在 Vue 中获取 api 后控制台日志未定义

java - java中如何将字符串转换为字符数组

string - 识别字符序列中的单词

JavaScript 正则表达式 - (? :)

c - C中带指针的for循环

java - 用于拆分字符串以获取运算符的正则表达式

.net - 为什么 .NET 区分字符串和字符?

c - 在 C 中将用户输入存储在数组中并将其打印回用户