PHP生成唯一邀请码
需求是每个用户都有个邀请码,邀请字母数字组成的10位字符串,首先想到的就是生成随机字符串了,如下
public function createNonceStr($length = 16)
{$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$str = '';for ($i = 0; $i < $length; $i++) {$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);}return $str;
}
但是这种方法理论上还是存在相同的可能性,尤其是用户数量足够大的情况。
这里我找到了一种比较简单但是能保证唯一性的算法,而且生成的字符串长度也很小(用户id为99999999时生成加密字符串为gVKJn),8位数的用户ID仅生成了5位数的加密字符串,如下
/*** 生成邀请码* @param $userId 用户ID*/private function getInviteCode($userId){$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$num = strlen($chars);$str = '';while ($userId > 0) {$mod = $userId % $num;$userId = ($userId - $mod) / $num;$str = $chars[$mod] . $str;}return $str;}
为了达到格式的统一性,也为了展示出不确定性,可以在将第二个方法和第一个方法结合。当第二张方法生成的加密字符串位数不足时,用第一个方法生成的随机字符串拼接在其前方,如下要求邀请码为10位时的情况
/*** 生成邀请码* @param $userId 用户ID*/private function getInviteCode($userId){$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$num = strlen($chars);$str = '';while ($userId > 0) {$mod = $userId % $num;$userId = ($userId - $mod) / $num;$str = $chars[$mod] . $str;}// 不足用随机字符串补充,10表示邀请码邀请10位$str = str_pad($str, 10, self::createNonceStr(10 - strlen($str)), STR_PAD_LEFT); return $str;}
参考文章
PHP生成唯一邀请码相关推荐
- 用户ID生成唯一邀请码的几种方法
文章目录 1.需求描述 2.需求分析 3.字符集 4.方法一:随机数+唯一性判断(不可逆) 5.方法二:Hash+唯一性判断(不可逆) 6.方法三:进制法(可逆) 7.方法四:进制法+扩散.混淆(可逆 ...
- html 生成唯一码,生成唯一邀请码.html
Document let sourceString = 'ZDOWGVJ5ASB3IRP9QM41EYFCU2TN76XH0KL';//三十五进制字符串长度不足8,用数字8高位补全 function ...
- 趣谈唯一邀请码生成方法
趣谈唯一邀请码生成方法 前段时间项目上需要生成唯一邀请码!嘿嘿,多简单的一件事,心里就已默默将代码写了一遍.但小小的邀请码生成却也小有乾坤,这就是后话了. 一.最简单的实现 很多人 肯定都和我一开始一 ...
- java生成一条唯一的邀请码_根据用户id生成一个唯一邀请码
需求描述:根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'. 这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到 ...
- 如何实现用户id生成一个唯一邀请码
一个10进制的数字短还是一个16进制的数字短? 肯定是16进制相对短一些,所以我们可以直接把用户id转成10+26=36进制的不就可以了吗?具体代码如下: function createCode($u ...
- php用户注册自动生成邀请码,PHP如何实现根据用户id生成一个唯一邀请码
根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...
- java生成一条唯一的邀请码_如何实现用户id生成一个唯一邀请码
根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...
- mysql 生成邀请码_如何实现用户id生成一个唯一邀请码
根据用户id生成与之对应的唯一邀请码,范围为'0-9A-Z'.这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升. ...
- php生成游客id_PHP根据用户ID生成唯一的邀请码 | 剑花烟雨江南
在开发中,我们可能会遇到需要生成用户唯一的邀请码,来做一些邀请活动,接下来,我们思考如何生成唯一的邀请码,且可以根据邀请码获取到用户id. 首先,我们可以考虑使用用户user_id 来生成邀请码,并生 ...
最新文章
- JZOJ 5390. 【NOIP2017提高A组模拟9.26】逗气
- 赞!超炫的页面切换动画效果【附源码下载】
- git分支(branch)操作相关命令
- 令人叫绝的EXCEL函数功能
- 获得进程id_浅谈python中的多线程和多进程(二)
- unity常见问题之20题
- 为什么越来越多的人尝试做自媒体
- oracle数据库字段的值加一_天天面试--数据库乐观锁和悲观锁
- Underscore骨骼
- wx.login 和 wx.getUserProfile 同时使用问题
- [转]阮杰:从散户到身价过亿的私募掌门人
- ERP100人物.第25期【风里来云里去兮,风行天下志更坚】 风云子
- php 足迹 表设计,成长的足迹设计方案
- bps是什么单位?是什么意思
- 有些MP4只有音频没有视频的解决办法
- 百度地图导航Android6.0初始化失败解决方法
- 算法练习-Apples Prologue
- java配置文件起名规范_Mybatis注解和配置文件命名规范所引发的问题
- Gartner年度趋势预测汇总整理(2006年-2023年)
- 统一身份认证子系统界面设计与实现