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

在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位推荐码等
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,778评论 25 709
  • 基本概念以及生成下一个排列、组合的算法整理。参考:Discrete mathematics and its app...
    chnmagnus阅读 854评论 0 0
  • 那次公园长谈之后,知道了李薇做小三儿也是迫不得已,我对她由最初的嫌弃、远离渐渐又多出一些同情。 但对她的言谈举止和...
    c34d5a414b92阅读 291评论 0 2