V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
azev
V2EX  ›  问与答

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

  •  
  •   azev · Oct 8, 2018 · 1576 views
    This topic created in 2761 days ago, the information mentioned may be changed or developed.
    现在的情况是想把当前数据库里店铺记录的 id 提供出去 当做 code 码使用
    比如分店代码,让员工自己手填进去.

    有没有好办法?

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

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

    10-> 2100

    121->21210

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

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

    当然,简单粗暴的做法就是 2 楼或者 4 楼的方法,直接用 100000+id 或者 200000-id 后者 id*x+y
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5120 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 09:05 · PVG 17:05 · LAX 02:05 · JFK 05:05
    ♥ Do have faith in what you're doing.