一个10进制的数字短还是一个16进制的数字短?

肯定是16进制相对短一些,所以我们可以直接把用户id转成10+26=36进制的不就可以了吗?具体代码如下:

function createCode($user_id){static $source_string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';$num = $user_id;$code = '';while($num){$mod = $num % 36; $num = ($num - $mod) / 36;$code = $source_string[$mod].$code;}return $code;}

邀请码保证了唯一性,并且长度不会太长,用户id也能够根据邀请码反推出来,但是有一点不好的是,别人也可以根据邀请码去反推出user_id,因此,我们需要做一些优化。

优化

把0剔除,当做补位符号,比如小于四位的邀请码在高位补0,这样36进制就变成了35进制,然后把字符串顺序打乱,这样,在不知道$source_string的情况下,是没办法解出正确的user_id的。

代码如下:

function createCode($user_id) {static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';$num = $user_id;$code = '';while ( $num > 0) {$mod = $num % 35;$num = ($num - $mod) / 35;$code = $source_string[$mod].$code;}if(empty($code[3]))$code = str_pad($code,4,'0',STR_PAD_LEFT);return $code;}

这样,对应user_id的唯一邀请码就生成了,再附一个解码函数:

function decode($code) {static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';if (strrpos($code, '0') !== false)$code = substr($code, strrpos($code, '0')+1);$len = strlen($code);$code = strrev($code);$num = 0;for ($i=0; $i < $len; $i++) {$num += strpos($source_string, $code[$i]) * pow(35, $i);}return $num;}

如何实现用户id生成一个唯一邀请码相关推荐

  1. java生成一条唯一的邀请码_根据用户id生成一个唯一邀请码

    需求描述:根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'. 这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到 ...

  2. php用户注册自动生成邀请码,PHP如何实现根据用户id生成一个唯一邀请码

    根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...

  3. java生成一条唯一的邀请码_如何实现用户id生成一个唯一邀请码

    根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...

  4. mysql 生成邀请码_如何实现用户id生成一个唯一邀请码

    根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...

  5. 基于用户id的最优邀请码生成方案

    在程序开发中,经常会遇到生成邀请码的需求,最近在开发海盗鼠的过程中,也遇到了邀请码生成的问题,Google了一把,没有发现好的生成方案,没办法,只能自己造轮子了,在这里把实现方案记录下来,方便大家,当 ...

  6. 用户ID生成唯一邀请码的几种方法

    文章目录 1.需求描述 2.需求分析 3.字符集 4.方法一:随机数+唯一性判断(不可逆) 5.方法二:Hash+唯一性判断(不可逆) 6.方法三:进制法(可逆) 7.方法四:进制法+扩散.混淆(可逆 ...

  7. 通过用户id生成邀请码

    已知一个用户的ID(ID是长整形)根据用户ID给用户生成一个唯一的邀请码(邀请码范围([a-z0-9])?代码实现! 字符a-z0-9刚好是36个.是否可以考虑直接将用户ID转换成一个36进制的数呢? ...

  8. java唯一码_唯一邀请码生成(Java版本)

    前言 之前收到一个需求,甲方说,他们想给用户生成一个唯一的邀请码,然后用户量在xxx之类的,例如我这里就随便说个5kw个吧.这个嘛,听起来都觉得挺简单的,毕竟每个用户基本上都有自己的唯一用户id,用那 ...

  9. 唯一邀请码生成(Java版本)

    前言 之前收到一个需求,甲方说,他们想给用户生成一个唯一的邀请码,然后用户量在xxx之类的,例如我这里就随便说个5kw个吧.这个嘛,听起来都觉得挺简单的,毕竟每个用户基本上都有自己的唯一用户id,用那 ...

最新文章

  1. Redis的简单实践
  2. jar包 热加载/卸载 的初步实现
  3. HTML特效之团购页面效果
  4. Java 多线程 并发编程------超全面
  5. NOMURA Programming Contest 2021(AtCoder Regular Contest 121)
  6. 优化网站设计系列文章总结和导读
  7. JavaScript学习(五十五)—组合继承
  8. EasyUI+MVC+EF简单用户管理Demo(问题及解决)
  9. js排序算法详解-堆排序
  10. matlab炮灰模型,非诚勿扰的数学分析
  11. 技术规范,过几天发个压缩包,一次下载全部拥有
  12. jsmind 线条_jsmind/2.options.md at master · hizzgdev/jsmind · GitHub
  13. 这个【vue】项目,让我明白了…
  14. 2003-2021年高铁列车信息
  15. PMI-ACP敏捷项目认证练习题(一)
  16. txt文件英语单词词频统计
  17. 东华软件张涵诚:政府大数据应用的案例和数据价值释放的方法
  18. 学计算机的心理300字,心理作文300字10篇
  19. 第十二天 结构体大全
  20. 3.计算机的应用领域及其发展趋势是什么,计算机应用的现状及其发展趋势

热门文章

  1. 计【思考】如不解决这些问题,山东招远这类事情以后仍然会不断发生!!
  2. mysql 8.0.28安装教程(超简单)
  3. Markdown添加目录(自定义目录)
  4. 好看简洁的网站跳转页面
  5. JavaWeb学习笔记(5)-B站尚硅谷
  6. 快手怎么引流做CPA?如何在快手直播上截流操作CPA项目
  7. HP-UX操作系统安装配置手册
  8. NOI2014魔法森林--LCT
  9. C++中指针是什么?
  10. 坦白说自动获取有效好友