如何实现用户id生成一个唯一邀请码
一个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生成一个唯一邀请码相关推荐
- java生成一条唯一的邀请码_根据用户id生成一个唯一邀请码
需求描述:根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'. 这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到 ...
- php用户注册自动生成邀请码,PHP如何实现根据用户id生成一个唯一邀请码
根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...
- java生成一条唯一的邀请码_如何实现用户id生成一个唯一邀请码
根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...
- mysql 生成邀请码_如何实现用户id生成一个唯一邀请码
根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...
- 基于用户id的最优邀请码生成方案
在程序开发中,经常会遇到生成邀请码的需求,最近在开发海盗鼠的过程中,也遇到了邀请码生成的问题,Google了一把,没有发现好的生成方案,没办法,只能自己造轮子了,在这里把实现方案记录下来,方便大家,当 ...
- 用户ID生成唯一邀请码的几种方法
文章目录 1.需求描述 2.需求分析 3.字符集 4.方法一:随机数+唯一性判断(不可逆) 5.方法二:Hash+唯一性判断(不可逆) 6.方法三:进制法(可逆) 7.方法四:进制法+扩散.混淆(可逆 ...
- 通过用户id生成邀请码
已知一个用户的ID(ID是长整形)根据用户ID给用户生成一个唯一的邀请码(邀请码范围([a-z0-9])?代码实现! 字符a-z0-9刚好是36个.是否可以考虑直接将用户ID转换成一个36进制的数呢? ...
- java唯一码_唯一邀请码生成(Java版本)
前言 之前收到一个需求,甲方说,他们想给用户生成一个唯一的邀请码,然后用户量在xxx之类的,例如我这里就随便说个5kw个吧.这个嘛,听起来都觉得挺简单的,毕竟每个用户基本上都有自己的唯一用户id,用那 ...
- 唯一邀请码生成(Java版本)
前言 之前收到一个需求,甲方说,他们想给用户生成一个唯一的邀请码,然后用户量在xxx之类的,例如我这里就随便说个5kw个吧.这个嘛,听起来都觉得挺简单的,毕竟每个用户基本上都有自己的唯一用户id,用那 ...
最新文章
- Redis的简单实践
- jar包 热加载/卸载 的初步实现
- HTML特效之团购页面效果
- Java 多线程 并发编程------超全面
- NOMURA Programming Contest 2021(AtCoder Regular Contest 121)
- 优化网站设计系列文章总结和导读
- JavaScript学习(五十五)—组合继承
- EasyUI+MVC+EF简单用户管理Demo(问题及解决)
- js排序算法详解-堆排序
- matlab炮灰模型,非诚勿扰的数学分析
- 技术规范,过几天发个压缩包,一次下载全部拥有
- jsmind 线条_jsmind/2.options.md at master · hizzgdev/jsmind · GitHub
- 这个【vue】项目,让我明白了…
- 2003-2021年高铁列车信息
- PMI-ACP敏捷项目认证练习题(一)
- txt文件英语单词词频统计
- 东华软件张涵诚:政府大数据应用的案例和数据价值释放的方法
- 学计算机的心理300字,心理作文300字10篇
- 第十二天 结构体大全
- 3.计算机的应用领域及其发展趋势是什么,计算机应用的现状及其发展趋势