V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
azev
V2EX  ›  问与答

怎样把一个 1-4 位数字转为另一个 4-6 位数字 而且保证唯一性且能还原?

  •  
  •   azev · 2018-10-08 10:17:15 +08:00 · 1253 次点击
    这是一个创建于 2250 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在的情况是想把当前数据库里店铺记录的 id 提供出去 当做 code 码使用
    比如分店代码,让员工自己手填进去.

    有没有好办法?

    现在系统不好做太大变动,所以不想在数据库里增加字段,而是根据一个规则编码和解码.
    想过乘上一个数字然后补全什么的,但都不太好,不能确定位数,也不知道能不能保证唯一性.
    prolic
        1
    prolic  
       2018-10-08 10:22:58 +08:00
    第一位统一写原数字位数,后面补零,拿到统一位数的就随便变了
    hearfish
        2
    hearfish  
       2018-10-08 10:28:34 +08:00
    太多了,比如 x * 47 + 953
    azev
        3
    azev  
    OP
       2018-10-08 10:29:36 +08:00
    @prolic 这样? 貌似不错呢

    1->1100
    2->1200
    9->1900

    10-> 2100

    121->21210

    2318->42318
    9999->49999
    exmario
        4
    exmario  
       2018-10-08 11:01:08 +08:00
    统一前面补 10 凑成 6 位,还原更简单,减 100000 就完事了
    af463419014
        5
    af463419014  
       2018-10-08 12:04:50 +08:00
    如果是我的话,我会建一个单独的表记录店铺 id 和 code 对应关系
    初始空表,封装一个查询器操作这个表,查询器根据 id 返回 code,或者根据 code 返回 id

    查询时,如果表里没有记录,那么生成一个随机且未使用过的 code 记录到表里
    如果有记录,直接返回

    当然,简单粗暴的做法就是 2 楼或者 4 楼的方法,直接用 100000+id 或者 200000-id 后者 id*x+y
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5869 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:23 · PVG 10:23 · LAX 18:23 · JFK 21:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.