美文网首页前端全栈工程师前端开发前端开发
Javascript实现的一种简单的推荐码算法

Javascript实现的一种简单的推荐码算法

作者: ray0324 | 来源:发表于2016-07-07 20:26 被阅读256次

    在app开发中遇到这样的需求
    1.根据数据库中用户ID生成一个字符串 此字符串作为用户的推荐码 与用户ID一样 具备唯一性
    **2.根据特定的算法 可以将该推荐码转化为用户id **

    即 算法满足下面的需求

    var cipher = encode(id,secret); //根据用户id生成推荐码
    var id = decode(cipher,secret); //根据推荐码 解码出用户id
    

    以下为js简易实现过程

    //注意 secret中的字符不能重复 且加密解密过程中使用的secret必须一致
    
    function encode(num,secret){
    
        if(typeof secret!=='string'){
            throw new Error('illegal secret!');
        }
        var arr = [];
        var n =secret.length;
        (function(num){
            arr.push(num%n)
            if(num >= n){
                arguments.callee(Math.floor(num/n))
            }
        })(num)
        return arr.map(function(item){return secret[item]}).reverse().join('');
    }
    
    function decode(str,secret){
    
        if(typeof secret!=='string'){
            throw new Error('illegal secret!');
        }
        var n =secret.length;
        var arr = str.split('').reverse().map(function(item){
                return secret.indexOf(item);
            })
        var result=0;
        for(var i = 0;i<arr.length;i++){
            result +=Number(Math.pow(n,i)*arr[i])
        }
        return result;
    }
    
    //使用示例:
    var secret ='zabcdefghjklmnpqrstuvwxy23456789'.split('').sort(function(){return Math.random()-0.5}).join('');
    
    document.write('密码是:'+secret+'<br/>');
    document.write('明文是:'+13005448800+'<br/>');
    var cipher =  encode(13005448800,secret);
    document.write('密文:'+cipher+'<br/>');
    document.write('解码后:'+decode(cipher,secret));
    

    注意:

    • 这是一个简易实现 在实际使用中需要对明文id和密文secret进行格式校验
    • 当然 稍作改动 也可以根据id范围 生成指定长度的字符串 例如 特定6位推荐码等

    相关文章

      网友评论

        本文标题:Javascript实现的一种简单的推荐码算法

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