美文网首页
十进制转多进制的方式处理URL中显示的数据库自增ID

十进制转多进制的方式处理URL中显示的数据库自增ID

作者: 简石榴 | 来源:发表于2018-12-18 12:38 被阅读0次

    问题概述:

    ​ 一次转盘抽奖项目中,为了避免现场活动中参与者,多次兑奖的情况,需要提供相应的“核销码”。

    具体分析:

    ​ “核销码”应该具有唯一性。其次“核销过程”应该尽量简化(后面实践中采用按钮的形式,没有了“核销码”)

    为了实现核销码的唯一性,虽然存在相关类似idCreator 这样的id生成器的存在,但这是复杂且不合理的。反观现有的数据仓储方式,粗糙的应用了EFCore框架 数据库中存在自增主键唯一标识一条记录,可以完美的充当“核销码”的角色。

    ​ 经过上面的分析,我们准备用数据库中自增的主键来实现“核销码”的要求。这样就面临题目中所提到的将数据库中自增主键暴露出去的问题。下面采用的十进制转多进制的实现方式解决这个问题。

            
    public static string source_string = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    public static string enCode(int num)
    {
        var code = string.Empty;
    
        while (num>0)
        {       
            var mod = num % 36; 
            num = (num - mod) / 36;
            code = source_string[mod] + code;
        }
        if(code.Length<6)
            code = code.PadLeft(6, '0');
            return code;
    }
    
    public static int deCode(string code)
    {
        var num = 0.0;
        if (code.LastIndexOf('0') != -1)
            code = code.Substring(code.LastIndexOf('0') + 1);
        code = new string(code.ToCharArray().Reverse<char>().ToArray<char>());
        foreach (var c in code)
        {
            num += source_string.IndexOf(c) * Math.Pow(36, code.IndexOf(c));
        }
        return Convert.ToInt32(num);
    }
    
    

    例如 12345 经过上述编码过程后 编码为 0009IX

    也可以把基准字符串 打乱,减少什么的 编码后的数据更具有迷惑性

    参考博文:

    根据用户id生成一个唯一邀请码

    相关文章

      网友评论

          本文标题:十进制转多进制的方式处理URL中显示的数据库自增ID

          本文链接:https://www.haomeiwen.com/subject/ujnkkqtx.html