【问题标题】:Encoding and decoding a unique ID between two systems in nodejs在nodejs中编码和解码两个系统之间的唯一ID
【发布时间】:2022-11-23 19:54:23
【问题描述】:

我正在编写一个脚本来同步两个系统之间的用户。让我们说源系统和目标系统。

为了帮助同步它们,我希望将源系统中的用户 ID 作为目标系统中的 ID 存储。

不幸的是,目标系统对我可以存储的属性有最大字符长度限制。

如果可能的话,我想避免创建一个新表来保持这种关系。

我无法截断它,因为我需要能够从目标系统返回到源系统中的用户。

有没有办法对源用户 ID 进行编码和解码?

编辑:

源系统中的 ID 将始终遵循以下结构:

/^[a-zA-Z0-9]{6}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{3}-[a-zA-Z0-9]{6}$/

例如:as0092-banc-mdn-da1023

除了最大字符长度为 20 之外,目标系统中可以存储的内容没有任何限制。

【问题讨论】:

  • 这取决于您的用户 ID 在源系统中的样子
  • 像“as0092-banc-mdn-da1023”之类的东西
  • “就像是”?那不会有帮助的。它有多长,它可以包含哪些字符?有固定的地方吗?对结构还有其他限制吗?您可以在目标系统中使用哪些字符?对于可逆映射,最重要的条件是目标系统中的键至少与源系统中的键一样多。您的示例是目标中可用位置的两倍多,所以我想说找到可逆映射将非常困难
  • 我已经更新了问题。抱歉,我没有意识到它会对您如何去做有如此大的影响。到目前为止,我在谷歌搜索中似乎遗漏了“可逆映射”一词

标签: node.js


【解决方案1】:

当您最初发布您的问题时,您似乎需要进行大量转换,即将 20 个字符长的 ID 压缩成更短的内容,这将是一个很大的问题。但现在在你编辑之后似乎很容易:

目标系统中有 20 个可用字符,但源系统中的 ID 只有 19 个可变字符加上固定位置的 3 个破折号。

因此,当从源转换为目标时,只需删除破折号。这将为您提供一个长度为 19 的字符串,它将完全适合目标系统上 20 个字符宽的字段。由于破折号位于固定位置,因此它们不带有任何语义,即删除它们不会篡改您 ID 的唯一性。

当从目标转换回源时,您知道破折号在 ID 中的位置,即在压缩 ID 的第 6 个、第 10 个和第 13 个字符之后。所以只需将它们放回正确的位置,您就可以恢复源系统的 ID 格式......

let 
  original = 'as0092-banc-mdn-da1023',   //this is the key from your example
  target = original.replace(/-/g, ""),   //this removes all dashes
  source = target.slice(0, 6) + "-"      //this takes certain portions of your squished ID
    + target.slice(6, 10) + "-"          //and inserts dashes between them
    + target.slice(10, 13) + "-"
    + target.slice(13)
    
console.log("original ", original, "  length", original.length);

//the mapped ID fits perfectly into your target system's length restriction
console.log("target   ", target, "     length", target.length);

//the reversed mapping is equal to your original ID
console.log("source   ", source, "  length", source.length);
console.log("test eq  ", source === original);

当然还有其他可能性,删除并重新添加破折号,但我认为您已经了解了代码背后的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多