首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs中两个系统间唯一ID的编码和解码

nodejs中两个系统间唯一ID的编码和解码
EN

Stack Overflow用户
提问于 2022-11-22 21:38:55
回答 1查看 20关注 0票数 0

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

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

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

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

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

有编码和解码源用户ID的方法吗?

编辑:

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

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

例如:mdn 0092-banc-mdn-mdn 1023

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-23 09:28:46

当你最初发布你的问题时,你似乎需要一个大的转换(将一个20个字符长的ID压缩成更短的东西,这将是一个相当大的问题。)但是现在编辑之后,看起来很容易:

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

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

当从目标转换回源的时候,你知道在你的ID中,破折号必须去哪里,即在你的压缩ID的第6,10,13字符之后。所以把它们放回到正确的地方,你有你的源系统的ID格式。

代码语言:javascript
复制
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);

当然还有其他的可能性,可以删除和读取破折号,但我认为您理解代码背后的想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74539247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档