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

本文探讨了如何根据用户ID生成一个既能隐藏ID又能保证唯一性的邀请码。错误思路包括简单拼接和插入ID,而正解是将ID转换为36进制。为了增加安全性,进行了优化,如剔除0作为补位符号并打乱字符串顺序,确保在未知规则下难以反推出原始ID。同时提供了编码和解码的实现方案。
摘要由CSDN通过智能技术生成
求描述:根据用户id生成与之对应的唯一邀请码,范围为‘0-9A-Z’。

这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升。

错误思路

随机生成一个字符串,再将用户id拼接到字符串后面,但是这样id就太明显了,容易暴露,而且如果id很长的话,会导致邀请码很长,不利于用户使用。

所以可以将用户id插入到生成的字符串中,隔一个字符插入一个id的数字,这样id混合在字符串中,不容易暴露,但是长度问题并没有得到优化,于是把隔一个字符插入一个id的数字改为隔一个字符插入两个id的数字。然而长度好像并没有受到太大的影响。

正解

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

1
2
3
4
5
6
7
8
9
10
11
12
13
function createCode( $user_id )
{
     static $source_string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' ;
     $num = $user_id ;
     $code = '' ;
     while ( $num
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值